cvtcolor 转换图片色彩
inRange 范围
copyto 覆盖
HSV格式
在颜色空间人们听得最多的是RGB,它也是计算机色彩的自然表示,但对于人类来说,HSV颜色空间更符合人类的感知。HSV(色相饱和度值):
H(Hue):色调,取值范围是 [0,179] ,它用来限制某一个颜色的彩色光谱范围;
S(Saturation):饱和度,取值范围是 [0,255] ,它用来限制颜色的深度,值越大颜色越深;
V(Value):色值,取值范围是 [0,255] ,它用来限制像素的亮度,值越大像素越亮。
inRange
OpenCV中的inRange()函数可实现二值化功能,检测色值是否在给定的范围内,若在,则是白色(1);若不,在则是黑色(0)。
比较类似Photoshop里的蒙版效果(mask),达到“黑透白不透”的效果
绿幕抠图就是这个道理
比如绿色的范围一般情况下Scalar(35, 43, 46)~ Scalar(77, 255, 255)之间
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
Mat hsv;
imshow("hsv原图", hsv);
cvtColor(image, hsv, COLOR_BGR2HSV); //bgr转换成hsv
//mask
Mat mask;
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
imshow("mask1", mask);
//做个背景图片--红色背景
Mat redback = Mat::zeros(image.size(), image.type());
redback = Scalar(40, 40, 200);
bitwise_not(mask, mask);//取个反--位的非处理
imshow("mask2", mask);
image.copyTo(redback, mask);//copyto的图片融合功能
imshow("roi区域提取", redback); //加个背景