当前位置:   article > 正文

opencv c++ 图像色彩空间转换 掩膜mask处理(12)_c++ mask model l

c++ mask model l

知识点:色彩空间及其转换

RGB色彩空间

HSV色彩空间

YUV色彩空间

YCrCb色彩空间

API:

cvtColor——色彩空间转换

inRange——提前指定色彩范围区域

 1、获取mask:

  1. void QuickDemo::in_Range_Demo(Mat& image) {
  2. Mat hsv;
  3. cvtColor(image, hsv, COLOR_BGR2HSV);
  4. //获取图像的mask
  5. Mat mask;
  6. inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
  7. imshow("mask", mask);
  8. }

上述Scalar中的参数是基于去掉绿色背景来取的Scalar上下限,如在下表中,绿色的三通道最小值分别为35,43,46。

结果:

 2、将mask和原背景合成:

1、将获取的mask进行取反操作,获取背景形状~mask。

2、创建背景矩阵redback,使用copyTo函数,将image复制到redback中,同时,保留~mask的部分。

image.copyTo(redback, mask);

代码:

  1. void QuickDemo::in_Range_Demo(Mat& image) {
  2. Mat hsv;
  3. cvtColor(image, hsv, COLOR_BGR2HSV);
  4. //获取图像的mask
  5. Mat mask;
  6. inRange(hsv, Scalar(35, 43, 46), Scalar(77, 255, 255), mask);
  7. //imshow("mask", mask);
  8. Mat redback = Mat::zeros(image.size(), image.type());
  9. redback = Scalar(40, 40, 255);
  10. bitwise_not(mask, mask);
  11. image.copyTo(redback, mask);
  12. imshow("redback", redback);
  13. }

结果: 

 如果想要扣的干净,可以将图中其余颜色的部分再次生成mask,重复上述操作即可,但仍会有微小瑕疵。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/742846
推荐阅读
相关标签
  

闽ICP备14008679号