用opencv怎么识别摄像头捕获视屏流中的特定颜色块
2016-05-31 10:27
661 查看
用opencv怎么识别摄像头捕获视屏流中的特定颜色块
举报描述不清违规检举侵权投诉|
分享|
2011-09-11 11:44
zq44zq | 浏览 2821 次
网络软件开发编程语言
可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。
opencv
摄像头
颜色
搜索资料
我有更好的答案
举报描述不清违规检举侵权投诉|2011-09-12
11:26
#“谁是脑力达人”赛前预热正式开启!#
提问者采纳
追问:
追答:
追问:
追答:
追问:
提问者评价
分享
评论(2)
|
给力5
不给力0
Belial2009
|
五级 采纳率47%
擅长:
C#/.NET
C/C++
照相机/摄像机
摄影摄像
图像处理软件
举报描述不清违规检举侵权投诉|
分享|
2011-09-11 11:44
zq44zq | 浏览 2821 次
网络软件开发编程语言
我想实现以下功能,用摄像头拍摄视频,然后电脑实时处理视频流,并识别每一帧中的特定颜色快,比如蓝色(就是蓝色成分较多)的部分。识别完后,符合条件的部分不变,不符合的部分涂黑。我知道用opencv可以捕获摄像头视频流,并处理某一帧。以下是我用c++编的代码的一部分, void callback(IplImage * image) { for(int i=0;i<image->height;i+=1) { for(int j=(image->widthStep)*i;j<(image->widthStep)*(i+1);j+=image->nChannels) { if(image->imageData[j]>BYTE(150)) { } else { image->imageData[j]=BYTE(0); image->imageData[j+1]=BYTE(0); image->imageData[j+2]=BYTE(0); } } } } 本来是想实现,视频流中蓝色成较多的部分保留,其余部分涂黑,但结果是,较亮的地方保留,较暗的地方涂黑,这是怎么回事呀,好急呀,望各位高手赐教。
可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。
opencv
摄像头
颜色
搜索资料
我有更好的答案
举报描述不清违规检举侵权投诉|2011-09-12
11:26
#“谁是脑力达人”赛前预热正式开启!#
提问者采纳
你首先将颜色空间转换到HSI空间去,然后根据HSI颜色空间的性质,找到对应的蓝色目标对应的H值和S值,提取出符合条件的像素,然后再转换到RGB空间。其实你也可以直接在RGB颜色空间,首先找到蓝色对应的RGB区间(B>R,B>G,蓝色目标满足的条件),另外RGB空间,B值满足的条件,提取出满足蓝色分量的目标,我以前做了一个,是提取蓝色目标的,效果还可以。
追问:
其实我也想直接在rgb空间提取蓝色成分较多的部分,我上述提供的代码就体现了这个想法,但是奇怪的是本来是想实现,视频流中蓝色成较多的部分保留,其余部分涂黑,但结果是,较亮的地方保留,较暗的地方涂黑。这是怎么回事呀,难道是摄像头的问题,是不是要摄像头能提供rgb24流才行呀,但是想一下也不对,既然void callback(IplImage * image)函数中输出使用的时rgb24格式,那么输入也应该是rgb24吧,好迷惑,还请高手继续指教。
追答:
你要把R>240&&B>240&&G>240(或者你自己设置应该阈值),将接近白色的区域给过滤掉。 并且你设置条件的时候要注意,对于蓝色目标总是有B>R&&B>G。(BGR) CvScalar cs,rs; cs=cvScalar(0,0,0,0); rs=cvScalar(1,1,1,1); for(int i=0;i<src->height;i++) { for (int j=0;j<src->width;j++) { cs=cvGet2D(src,i,j); if(cs.val[0]>cs.val[1]+Thresh1 && cs.val[0]>cs.val[2]+Thresh1 && cs.val[0]<240 && cs.val[1]<240 && cs.val[2]<240) { continue; } else { cvSet2D(src,i,j,rs); } } }
追问:
但是我发现当我设置阀值时,比如R>200时,视屏输出是全黑,也就是没有符合条件的像素元,于是我逐渐降低阀值,当R>127时,才能看到一些图像,也就是对于输入视屏流某一帧的图像,其数组值得范围好像不大于127.这就怪了,按理说rgb24的取值应该是0~256.怎么会只到127呢。是不是我的代码格式有问题,能不能使用image->imageData[j]>BYTE(150)这种比较格式。或者是摄像头的问题。不解呀,好着急呀
追答:
你那种格式我不太清楚,你用我给你的那种形式应该是没问题的
追问:
这位大神可以留个qq吗,还是不太懂,src是不是IplImage类型的指针呀,还有你这个代码和摄像头输出格式有没有关系呀,是不是对所有usb无驱动式摄像头都适用呀。
提问者评价
真是多谢你了,src是IplImage类型的指针,我改了后果然有用,多谢多谢,真是帮了我一个大忙。
分享
评论(2)
|
给力5
不给力0
Belial2009
|
五级 采纳率47%
擅长:
C#/.NET
C/C++
照相机/摄像机
摄影摄像
图像处理软件
相关文章推荐
- centos6.7安装mysql5.5.48的方法
- [转载]iOS开发常用国外网站清单
- 滴滴出行分而治之的架构设计之道
- linux80端口启动访问项目
- openedx环境部署-fullstatck
- tomcat7和tomcat8 对 资源路径的解析
- Openfire问题记录
- Shell安装
- linux进程通信--消息队列
- windows 用户登录和注销监控|windows session 状态改变监控
- tomcat端口配置文件解析
- 强悍的 Linux —— tar.xz 文件的解压
- CcentOS 安装VMware Tools 命令
- Linux 爱好者该向闭源软件敞开怀抱了
- Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/BasePoolableObjectFactory
- Caused by: java.lang.NoClassDefFoundError: org/apache/commons/pool/BasePoolableObjectFactory
- 判断是手机还是电脑访问网站
- CentOS 6.5/6.3升级安装ImageMagick7.0.1
- Dubbo基础篇--在Linux操作系统上手工部署Dubbo服务
- Maven-Optional Dependencies & Dependency Exclusion