3

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

ガベージ番号を返します

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 に答える