用opencv怎么识别摄像头捕获视屏流中的特定颜色块
我想实现以下功能,用摄像头拍摄视频,然后电脑实时处理视频流,并识别每一帧中的特定颜色快,比如蓝色(就是蓝色成分较多)的部分。识别完后,符合条件的部分不变,不符合的部分涂黑...
我想实现以下功能,用摄像头拍摄视频,然后电脑实时处理视频流,并识别每一帧中的特定颜色快,比如蓝色(就是蓝色成分较多)的部分。识别完后,符合条件的部分不变,不符合的部分涂黑。我知道用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);
}
}
}
}
本来是想实现,视频流中蓝色成较多的部分保留,其余部分涂黑,但结果是,较亮的地方保留,较暗的地方涂黑,这是怎么回事呀,好急呀,望各位高手赐教。 展开
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个回答
展开全部
你首先将颜色空间转换到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;iheight;i++)
{
for (int j=0;jwidth;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);
}
}
}
像素数据
2023-07-25 广告
2023-07-25 广告
人脸识别技术在多个领域得到了应用:1. 安防监控:在公共场所,如地铁站、机场、火车站等,人脸识别技术可以用于识别嫌疑人或者追踪犯罪嫌疑人,以预防和打击恐怖袭击,保障公共安全。2. 门禁管理:人脸识别技术可以方便快捷地验证身份,使门禁管理更加...
点击进入详情页
本回答由像素数据提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询