亿加合和智能车制作

标题: 关于逐飞凌瞳摄像头将彩色图像转换为灰度图像的问题 [打印本页]

作者: dangxia    时间: 2020-2-17 20:48
标题: 关于逐飞凌瞳摄像头将彩色图像转换为灰度图像的问题
请问各位大佬知道怎么把凌瞳摄像头反应到逐飞凌瞳上位机的彩色图像转换为灰度图像吗?我用的是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);
        }
        
    }


作者: dangxia    时间: 2020-2-18 17:41
已解决,可以通过把灰度值算出来然后再把灰度值放在RGB三个通道内,再进行RGB888转化成RGB565,就能在逐飞凌瞳彩色上位机上形成灰色图像了,车友们可以看看这个http://www.360doc.com/content/18/0410/09/7551_744364416.shtml
作者: cs538138    时间: 2020-2-19 12:52
你为啥不直接用总钻风呢

作者: dangxia    时间: 2020-2-19 19:54
cs538138 发表于 2020-2-19 12:52
你为啥不直接用总钻风呢

现在手头上只有凌瞳

作者: fbhsy    时间: 2020-2-21 19:52
公式乘的数据可以除10  这样可以降低数据范围。转换之后直接发送到总钻风的上位机。基本上方法没有多大问题,估计是你的程序哪里有小问题没有注意到,怎么不直接用彩色处理呢。
作者: 105227851    时间: 2020-2-22 11:03
hello  有问题请教 很急  在吗 麻烦了 谢谢
作者: 105227851    时间: 2020-2-22 11:03
hello  有问题请教 很急  在吗 麻烦了 谢谢


作者: dangxia    时间: 2020-2-25 23:38
fbhsy 发表于 2020-2-21 19:52
公式乘的数据可以除10  这样可以降低数据范围。转换之后直接发送到总钻风的上位机。基本上方法没有多大问题 ...

直接用彩色处理是指?是说不用灰度,二值化,直接对彩色图像进行校正,寻线,,等其他操作吗

作者: 凯寰星    时间: 2020-3-13 00:22
同问?





欢迎光临 亿加合和智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2