替换C++矩阵类中特定颜色的所有像素

Ani*_*udh 3 c++ opencv

1)我有一个Matrix类

Mat src = imread("/pic.png", 0)
Run Code Online (Sandbox Code Playgroud)

http://i1265.photobucket.com/albums/jj502/anizilla/demo_result.png

我想将上面给出的图像中的所有白色像素替换为黑色.

有没有办法用特定的RGB值替换所有像素?

2)当我使用 -

src.col(0).row(0)
Run Code Online (Sandbox Code Playgroud)

我得到了正确的价值观.有没有办法提取每个RGB通道的值?

3)当我使用 -

src.at<Vec2b>(0,0)[0];
Run Code Online (Sandbox Code Playgroud)

我得到垃圾值(比如.!).如果我使用,我会得到垃圾值<Vec2d>

但.我用的时候

src.at<Vec2s>(0,0)[0];
Run Code Online (Sandbox Code Playgroud)

我为频道0获得了适当的值,并且,

src.at<Vec2s>(0,0)[1];
src.at<Vec2s>(0,0)[2];
Run Code Online (Sandbox Code Playgroud)

返回垃圾数量

ypn*_*nos 6

如果你做得对,这很简单.

  1. 使用显式模板实例化,例如

    Mat3b src = imread("/pic.png", 0);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用迭代器:

    for (Mat3b::iterator it = src.begin(); it != src.end(); it++) {
        if (*it == Vec3b(255, 255, 255)) {
            *it = Vec3b(0, 0, 0);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

对不起,第一个提议的解决方案(src.setTo(newMat, (src == old));)仅适用于单通道矩阵.