
直接对每个像素点判断即可,src是图像
IplImage src;
CvScalar s;
for(int i = 0;i < src->height;i++)
{
for(int j = 0;j < src->width;j++)
{
s = cvGet2D(src,i,j); // 获得像素值
if(sval[0]<50&&sval[1]<50&&sval[2]>200)
//注意这里的012对应的是bgr,范围的意思是防止光线的明暗影响,可以适当放宽,另外你也可以选择其他的颜色空间,可以直接取消明暗影响,比如HSV
{
sval[0]=0;
sval[1]=0;
sval[2]=255;
} //如果满足条件就设置为红色
else
{
sval[0]=0;
sval[1]=0;
sval[2]=0;
} //如果不满足就设置为黑色
cvSet2D(src,i,j,s); //设置像素
}
}
cvNamedWindow( "image", 1 );
cvShowImage("image",src); //显示出来
另外你说的定位是什么意思,是不是说像车牌那样做一个矩形框框起来?我这做过一个车牌定位的,如果是的话我可以发给你!或者把代码贴出来
//因为要计算H-S的直方图,所以需要得到一个HSV空间的图像
cvtColor(srcImage, hsvImage, CV_BGR2HSV);
imshow("HSV空间的原图", hsvImage);
//为计算直方图配置变量
//首先是需要计算的图像的通道,就是需要计算图像的哪个通道(bgr空间需要确定计算 b或g货r空间)
int channels[] = { 0, 1 };
//然后是配置输出的结果存储的 空间 ,用MatND类型来存储结果
MatND dstHist;
//接下来是直方图的每一个维度的 柱条的数目(就是将数值分组,共有多少组)
//如果这里写成int histSize = 256; 那么下面调用计算直方图的函数的时候,该变量需要写 &histSize
int histSize[] = { 30, 32 };
//最后是确定每个维度的取值范围,就是横坐标的总数
//首先得定义一个变量用来存储 单个维度的 数值的取值范围
float HRanges[] = { 0, 180 };
float SRanges[] = { 0, 256 };
const float ranges[] = { HRanges, SRanges };
-
以上就是关于求用opencv识别红色区域 并定位的具体流程!!!全部的内容,包括:求用opencv识别红色区域 并定位的具体流程!!!、opencv怎样求直方图变化最陡峰值的位置、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)