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

时间:2012-06-30 09:08:44

标签: c++ opencv

1)我有一个Matrix类

Mat src = imread("/pic.png", 0)

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

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

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

2)当我使用 -

src.col(0).row(0)

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

3)当我使用 -

src.at<Vec2b>(0,0)[0];

我获得了垃圾值(例如.!)。如果我使用<Vec2d>

,我会获得垃圾值

但是。当我使用

src.at<Vec2s>(0,0)[0];

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

src.at<Vec2s>(0,0)[1];
src.at<Vec2s>(0,0)[2];

返回垃圾编号

1 个答案:

答案 0 :(得分:6)

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

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

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

    for (Mat3b::iterator it = src.begin(); it != src.end(); it++) {
        if (*it == Vec3b(255, 255, 255)) {
            *it = Vec3b(0, 0, 0);
        }
    }
    
  3. 抱歉,第一个提议的解决方案(src.setTo(newMat, (src == old));)仅适用于单通道矩阵。