aihot  2017-05-08 13:38:11  OpenCV |   查看评论   

 OpenCV成长之路(3):模仿PhotoShop中魔术棒工具

本文的主题实际上是图像的颜色空间的转换,借助一个颜色选取来说明OpenCV中颜色转换函数的用法以及一些注意事项。

一、几种常见的颜色空间:

RGB颜色空间:RGB采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色。光线从暗黑开始不断叠加 产生颜色。RGB描述的是红绿蓝三色光的数值。数字图像存储方面一般都是用RGB模式,值得注意的是OpenCV里三通道的存储顺序是BGR。

HSV,HSI:这两个颜色格式都是根据人眼对颜色的区分来定义的格式,其中H(hue)表示色相,S(saturation)表示饱和度,V(value)表示明度,I(intensity)代表了亮度。

Lab空间:模型中均匀改变对应于在感知颜色中的均匀改变,所以我们可以把Lab想像为颜色空间中的一个点,相邻的点靠的越近说明两者的颜色越接近,所以Lab空间常用来度量两个颜色的相似性。

二、OpenCV中的颜色空间转换

OpenCV里通过cvtColor函数来完成图片的颜色转换,cvtColor是在opencv2/imgproc/imgproc.hpp头文件中定义的,它的C++接口如下:

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )

src:输入图像。

dst:输出图像。

code:颜色转换类型,比如:CV_BGR2Lab,CV_BGR2HSV,CV_HSV2BGR,CV_BGR2RGB。

dstCn:输出图像的通道号,如果默认为0,则表示按输入图像的通道数。

把image图像由BGR转换为Lab:cvtColor(image,image,CV_BGR2Lab)

三、简单的魔术棒程序

首先我们定义一个colorDetect类:

class colorDetect{ private:     int minDist; //最小可接受距离     Vec3b target;//目标颜色;        Mat result; //结果 public:     colorDetect();     void SetMinDistance(int dist);     void SetTargetColor(uchar red,uchar green,uchar blue);                 
 1/4    1 2 3 4 下一页 尾页
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV成长之路(3):模仿PhotoShop中魔术棒工具

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]