Opencv 处理图像的颜色
时间: 2018-12-05来源:OSCHINA
前景提要
「深度学习福利」大神带你进阶工程师,立即查看>>>
1、用策略模式比较颜色
策略设计模式是一种面向对象的设计模式。这种模式尽可能地将算法的复杂性隐藏在一个直观的编程借口后面,更有利于算法的部署。
注意:在现代体系中,浮点数的欧几里得距离的计算速度比(RGB差值的绝对值)进行累加。
2、计算向量的欧几里得范数的函数
return static_cast<int>(cv::Vec3i(color[0]-target[0],color[1]-target[1],color[2]-target[2])));
3、 cv::saturate_cast函数 。计算像素时会自动调用这个函数,保证像素值在0-255。
4、 threshold(output,output,maxDist,255,cv::THRESH_BINARY_INV)
这个函数通常用于将所有像素与某个阈值(第三个参数)进行比较,并在常规阈值化模式(THRESH_BINARY)下,将所有大于指定阈值的像素赋值为预定的最大值,。将其他像素赋值为0。这里用了THRESH_BINARY_INV。
一般来说,直接使用OPENCV函数,可以快速建立复杂程序,减少潜在错误,而且程序的运行效率通常也较高。 不过这样做会执行很多中间步骤,消耗更多内存。
5、 floodFill函数——找出与指定颜色接近的像素
floodFill函数的做法在判断一个像素时,还要检查附近像素的状态,这是为了识别某种颜色的相关区域。用户只需要指定一个起始位置和允许的误差,就可以找出颜色相近的连续区域。
cv::floodFill(image,//输入、输出图像
Point(100,50),起始点(与这个点比较,找这个点像素的近似)
Scalar(255,255,255),填充颜色
Rect* 0,填充区域的边界矩形(绘制的颜色,这里是白色)
Scalar(35,35,35),偏差的最小、最大阈值
Scalar(35,35,35),正差阈值,两个阈值通常相等
FLOODFILL_FIXED_RANGE);与起始点像素比较
颜色接近的像素会被重新绘制成第三个参数指定的新颜色。
定义比参考色更高或更低的值作为阈值。
6、 GrabCut算法分割图像
从 静态图像中提取前景物体 ,使用GrabCut算法。
Mat result;
Mat bgModel,fgModel;
grabCut(image,//输入图像
result,分割结果
rectangle,包含前景的矩形
bgModel,fgModel,模型
5,迭代次数
GC_INIT_WITH_RECT); 使用矩形
这里,使用GC_INIT_WITH_RECT参数表示使用带边框的矩形模型。输入/输出的分割图像可以是以下四个值:
GC_BGD//明确属于背景的像素
GC_FGD明确属于前景的像素
GC_PR_BGD可能属于背景的像素
GC_PR_BGD可能属于前景的像素
调用这个函数之后,取得结果方式:
compare(result,GC_PR_FGD,result,CMP_EQ);
foreground(image.size(),CV_8UC3,Scalar(255,255,255);
image.copyTo(foreground,result);
实现原理:把所有未标记的像素临时标记为前景,基于当前的分类情况,算法把像素划分为多个颜色相近的组,引入前景和背景像素之间的边缘,确定背景前景的分割。在此过程中,将试图连接具有相似标记的像素,并且避免边缘出现在强度相对均匀的区域。
把问题表示成一幅连同的矩形,然后在图形上分割,以形成最优的解决方案。分割完毕后,像素会有新的标记,然后重复这个分组过程,找到最优的分割方案。







科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行