opencv c++ 图像色彩空间转换 掩膜mask处理(12)
知识点:色彩空间及其转换RGB色彩空间HSV色彩空间YUV色彩空间YCrCb色彩空间API:cvtColor——色彩空间转换inRange——提前指定色彩范围区域。
·
知识点:色彩空间及其转换
RGB色彩空间
HSV色彩空间
YUV色彩空间
YCrCb色彩空间
API:
cvtColor——色彩空间转换
inRange——提前指定色彩范围区域
1、获取mask:
void QuickDemo::in_Range_Demo(Mat& image) {
Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
//获取图像的mask
Mat mask;
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
imshow("mask", mask);
}
上述Scalar中的参数是基于去掉绿色背景来取的Scalar上下限,如在下表中,绿色的三通道最小值分别为35,43,46。

结果:

2、将mask和原背景合成:
1、将获取的mask进行取反操作,获取背景形状~mask。
2、创建背景矩阵redback,使用copyTo函数,将image复制到redback中,同时,保留~mask的部分。
image.copyTo(redback, mask);
代码:
void QuickDemo::in_Range_Demo(Mat& image) {
Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
//获取图像的mask
Mat mask;
inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
//imshow("mask", mask);
Mat redback = Mat::zeros(image.size(), image.type());
redback = Scalar(40, 40, 255);
bitwise_not(mask, mask);
image.copyTo(redback, mask);
imshow("redback", redback);
}
结果:

如果想要扣的干净,可以将图中其余颜色的部分再次生成mask,重复上述操作即可,但仍会有微小瑕疵。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)