2012-06-30 53 views
3

1)I具有矩阵类替换特定颜色的所有像素在C++矩阵类

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

回报垃圾数量

回答

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));)只适用于单信道矩阵。

+0

ypnos,我的图片是Mat类。如何将Mat src转换为Mat3b src? – Anirudh

+0

@ anirudh65024x它应该与Mat ...... – ArtemStorozhuk

+0

ypnos,它会引发错误“错误:'src =='''''不匹配'operator =='” – Anirudh