OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4094|回复: 3

STM32用OV7725摄像头找黑色方法。

[复制链接]

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
发表于 2018-5-14 16:25:48 | 显示全部楼层 |阅读模式
想到的方法比较粗糙  效果不好
先把RGB565转化成RGB各8位   然后RGB都趋于0则认为该像素点是黑点  然后打印像素点的坐标
Camera_Data 为像素点 格式RGB565   i、j为坐标   

#define RGB565_MASK_RED        0xF800  
#define RGB565_MASK_GREEN      0x07E0  
#define RGB565_MASK_BLUE       0x001F
//具体程序如下  分离三色
      red = (Camera_Data & RGB565_MASK_RED) >> 11;     
      green = (Camera_Data & RGB565_MASK_GREEN) >> 5;     
      blue = (Camera_Data & RGB565_MASK_BLUE);     
//补0填满8位
      red <<= 3;  
      green <<= 2;  
      blue <<= 3;  
                       
     if((red<=24)&&(green<=12)&&(blue<=24))     //各色趋于0 则认为接近黑色
               printf("x=%d\ny=%d\r\n",j,i);    //打印坐标


现象是一坨黑色如黑色键盘则串口会打印出坐标     在一张纸上画一条黑细线串口没反应不打印坐标
有没有哪位大侠做过图像识别的  指点指点   谢谢!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2018-7-14
在线时间
19 小时
发表于 2018-7-14 12:13:35 | 显示全部楼层

   
你好,我想请教你几个问题。
1: red = (Camera_Data & RGB565_MASK_RED) >> 11;     
      green = (Camera_Data & RGB565_MASK_GREEN) >> 5;     
      blue = (Camera_Data & RGB565_MASK_BLUE);     
在这一步时,三原色已经被分离出来了,他们应该是16进制的数据。
//补0填满8位     
     red <<= 3;  
      green <<= 2;  
      blue <<= 3;  
后面分别移位说是填满8位,这里他们的高位数字本来就是0呀red:0000 0000 000X XXXX green:0000 0000 00XX XXXX
blue:0000 0000 000X XXXX
2: if((red<=24)&&(green<=12)&&(blue<=24))     //各色趋于0 则认为接近黑色
这一步,我查了RGB565色码表,但是你这里的24 12 24是怎磨算出来的,能详述一下吗。
谢谢。
回复 支持 反对

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
 楼主| 发表于 2018-7-16 10:42:14 | 显示全部楼层
Camera_Data是16位的像素数值
red 、green、 blue是8位的不是18位的数

下面的24 12 24是判断阀值,不一定非要是这个数。这个阀值的确定要根据你的实际情况,例如环境光的影响,你送出的光强;你可能需要反复的调,最终确定出一个比较适合的阀值。
回复 支持 反对

使用道具 举报

9

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2017-6-16
在线时间
46 小时
 楼主| 发表于 2018-7-16 10:47:24 | 显示全部楼层
魔双月壁 发表于 2018-7-16 10:42
Camera_Data是16位的像素数值
red 、green、 blue是8位的不是18位的数

24 12 24判断阀值。
如果你把这个阀值调高了,那么就会有更多的像素点被认为是黑色的,这时候就有可能把环境中的灰暗部分包括进来,导致找到的坐标位置不准。
如果你把阀值调的更小一些,那么就会使得黑色的像素点变少,这就有可能会漏掉一部分你自己送出的光,最后的坐标位置也不准。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 13:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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