C++ |使用 setTo 更改 cv::mat 中的颜色

标签 c++ opencv

我有一个包含 vec3b 值的 cv::Mat 文件。这些值是来自图像的颜色。我想更改该图像中的一些颜色。

我知道用于正常矩阵操作的 setTo() 函数,但如何将它用于我的 Mat 文件?

我试过这样的:

 image = image.setto(Vec3b(0,0,0), image == Vec3b(255,0,0))

谢谢!

最佳答案

给定一张图片 image,我们想要找到 image 中等于 Scalar(255,0,0) 的所有像素然后将这些像素设置为 Scalar(0,0,0)

  • 首先我们需要获取mask,这样在mask中的某个位置设置为255,如果在image中对应的位置等于 Scalar(255,0,0),否则设置为 0。这可以通过 inRange() 实现功能。

    Mat mask;
    inRange(image, Scalar(255,0,0), Scalar(255,0,0), mask);
    
  • 现在将 setTo() 函数应用于 image

    image.setTo(Scalar(0,0,0), mask);
    

关于C++ |使用 setTo 更改 cv::mat 中的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981379/

相关文章:

c++ - std::basic_string 特化

c++ - MapReduce - 直接插入 map 中 vector<int> 的第一个位置

image - 提高图像质量以通过 OpenCV 读取模糊数字

opencv - 如何在没有CMake的情况下在opencv v2.4.4和VC10中启用CUDA 5.0并解决错误 'missing cudart32_42_9.dll'?

c++ - C++ OpenCV 中的 cvPtr2D 等价物

c++ - 简单的 cpp map 存储和访问无法按预期工作

c++ - 当模板函数实例化失败时回退到备用函数

c++ - 将 key 传递给 Crypto++ 中的 AES 解密

c++ - Opencv从多个摄像机捕获视频

c++ - opencv中的最小值和最大值