哪个高手跟我讲一下在opencv中要怎么提取一张彩色图像中的红色部分,然后把他们修改为黑色
2个回答
展开全部
我这有个函数,是我以前用的,希望能帮到你。
// 提取特定颜色的目标:colorMode:1为Red,2为Green,3为Blue
int TakeColorFromImage(IplImage *srcImg,IplImage* result, int colorMode)
{
int i=0,j=0;
CvScalar cs=cvScalarAll(0);
for (i=0;i<result->height;i++)
{
for(j=0;j<result->width;j++)
{
cs=cvGet2D(result,i,j);
if (colorMode==1)
{
if(cs.val[0]>cs.val[1]&& cs.val[0]>cs.val[2] && cs.val[0]<245 && cs.val[1]<245 && cs.val[2]<245)
{
cvSet2D(result,i,j,cs);
}
else
{
continue;
}
}
else if (colorMode==2)
{
if(cs.val[1]>cs.val[0]&& cs.val[1]>cs.val[2] && cs.val[0]<245 && cs.val[1]<245 && cs.val[2]<245)
{
cvSet2D(result,i,j,cs);
}
else
{
continue;
}
}
else
{
if(cs.val[1]>cs.val[0]&& cs.val[1]>cs.val[2] && cs.val[0]<245 && cs.val[1]<245 && cs.val[2]<245)
{
cvSet2D(result,i,j,cs);
}
else
{
continue;
}
}
}
}
return 1;
}
我这是提取RGB中的其他一个颜色的目标,你要将其设置为0的话,就该cvSet2d()这里。
// 提取特定颜色的目标:colorMode:1为Red,2为Green,3为Blue
int TakeColorFromImage(IplImage *srcImg,IplImage* result, int colorMode)
{
int i=0,j=0;
CvScalar cs=cvScalarAll(0);
for (i=0;i<result->height;i++)
{
for(j=0;j<result->width;j++)
{
cs=cvGet2D(result,i,j);
if (colorMode==1)
{
if(cs.val[0]>cs.val[1]&& cs.val[0]>cs.val[2] && cs.val[0]<245 && cs.val[1]<245 && cs.val[2]<245)
{
cvSet2D(result,i,j,cs);
}
else
{
continue;
}
}
else if (colorMode==2)
{
if(cs.val[1]>cs.val[0]&& cs.val[1]>cs.val[2] && cs.val[0]<245 && cs.val[1]<245 && cs.val[2]<245)
{
cvSet2D(result,i,j,cs);
}
else
{
continue;
}
}
else
{
if(cs.val[1]>cs.val[0]&& cs.val[1]>cs.val[2] && cs.val[0]<245 && cs.val[1]<245 && cs.val[2]<245)
{
cvSet2D(result,i,j,cs);
}
else
{
continue;
}
}
}
}
return 1;
}
我这是提取RGB中的其他一个颜色的目标,你要将其设置为0的话,就该cvSet2d()这里。
追问
你是怎么确定你提取到的是红色的区域,红色不是应该有一个像素范围吗
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询