智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4047|回复: 8
打印 上一主题 下一主题

关于逐飞凌瞳摄像头将彩色图像转换为灰度图像的问题

[复制链接]

5

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
威望
225
贡献
118
兑换币
142
注册时间
2018-12-5
在线时间
4 小时
跳转到指定楼层
1#
发表于 2020-2-17 20:48:49 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
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);
        }
        
    }

回复

使用道具 举报

5

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
威望
225
贡献
118
兑换币
142
注册时间
2018-12-5
在线时间
4 小时
2#
 楼主| 发表于 2020-2-18 17:41:49 | 显示全部楼层
已解决,可以通过把灰度值算出来然后再把灰度值放在RGB三个通道内,再进行RGB888转化成RGB565,就能在逐飞凌瞳彩色上位机上形成灰色图像了,车友们可以看看这个http://www.360doc.com/content/18/0410/09/7551_744364416.shtml
回复

使用道具 举报

5

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
威望
225
贡献
118
兑换币
142
注册时间
2018-12-5
在线时间
4 小时
3#
 楼主| 发表于 2020-2-19 19:54:03 | 显示全部楼层
cs538138 发表于 2020-2-19 12:52
你为啥不直接用总钻风呢

现在手头上只有凌瞳
回复

使用道具 举报

5

主题

11

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
351
威望
225
贡献
118
兑换币
142
注册时间
2018-12-5
在线时间
4 小时
4#
 楼主| 发表于 2020-2-25 23:38:06 | 显示全部楼层
fbhsy 发表于 2020-2-21 19:52
公式乘的数据可以除10  这样可以降低数据范围。转换之后直接发送到总钻风的上位机。基本上方法没有多大问题 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-6 12:01 , Processed in 0.249452 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表