2012-06-30 88 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