中级会员
- 积分
- 351
- 威望
- 225
- 贡献
- 118
- 兑换币
- 142
- 注册时间
- 2018-12-5
- 在线时间
- 4 小时
|
5贡献
请问各位大佬知道怎么把凌瞳摄像头反应到逐飞凌瞳上位机的彩色图像转换为灰度图像吗?我用的是RT1064核心板+凌瞳,我的思路是等单片机采集完图像后利用循环和公式(r_value * 300 + g_value * 590 + b_value * 110) / 1000,把每一个像素点转换成灰度的,再创建一个很普通的二维数组,用来存取转换之后的像素点,然后再将转换后数组发送到上位机上;但是我的结果是这样处理之后上位机总是显示黑色,求各位车友帮忙解答
下面附上代码:
void scc8660_csi_isr(CSI_Type *base, csi_handle_t *handle, status_t status, void *userData)//中断函数
{
int i1,j1;
if(csi_get_full_buffer(&csi_handle,&fullCameraBufferAddr))
{
csi_add_empty_buffer(&csi_handle,(uint8 *)fullCameraBufferAddr);
if(fullCameraBufferAddr == (uint32)scc8660_csi1_image[0])
{
scc8660_csi_image = scc8660_csi1_image;//采集完成
L1CACHE_CleanInvalidateDCacheByRange((uint32)scc8660_csi1_image[0],SCC8660_CSI_W*SCC8660_CSI_H);
}
else if(fullCameraBufferAddr == (uint32)scc8660_csi2_image[0])
{
scc8660_csi_image = scc8660_csi2_image;//采集完成
L1CACHE_CleanInvalidateDCacheByRange((uint32)scc8660_csi2_image[0],SCC8660_CSI_W*SCC8660_CSI_H);
}
for(i1 = 0;i1 < SCC8660_CSI_PIC_H;i1++)
{
for(j1 = 0;j1 < SCC8660_CSI_PIC_W;j1++)
{
//提取R G B值
color_camera_take_point(scc8660_csi_image[0], j1, i1, SCC8660_CSI_PIC_W, &r_value,&g_value,&b_value);
//彩色图像转灰度公式
gray[i1][j1] = (r_value * 300 + g_value * 590 + b_value * 110) / 1000;
//简单二值化
if(gray[i1][j1] < 128)
{
gray[i1][j1] = 255;
}
else
{
gray[i1][j1] = 0;
}
}
}//以上是例程之外的程序
scc8660_csi_finish_flag = 1;//采集完成标志位置一
}
}
//主函数
int main(void)
{
DisableGlobalIRQ();
board_init(); //务必保留,本函数用于初始化MPU 时钟 调试串口
systick_delay_ms(100); //延时100ms,等待主板其他外设上电成功
usb_cdc_init();
scc8660_csi_init();//初始化摄像头 使用CSI接口
EnableGlobalIRQ(0);
while(1)
{
if(scc8660_csi_finish_flag)
{
scc8660_csi_finish_flag = 0;
//csi_seekfree_sendimg_scc8660(USART_1,(uint8*)scc8660_csi_image[0],SCC8660_CSI_PIC_W,SCC8660_CSI_PIC_H);//串口初始化 由于默认开启了printf功能,因此在board_init已经初始化了串口1 因此本例程不在初始化
seekfree_sendimg_scc8660_usb_cdc((uint8*)gray[0],SCC8660_CSI_PIC_W,SCC8660_CSI_PIC_H);
}
}
|
|