3

1)我有一个矩阵类

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];

返回垃圾号码

4

1 回答 1

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);
        }
    }
    

抱歉,第一个建议的解决方案 ( src.setTo(newMat, (src == old));) 仅适用于单通道矩阵。

于 2012-06-30T10:20:26.093 回答