web-dev-qa-db-ja.com

OpenCV:マスクを反転しますか?

OpenCVを使用してマスクを反転させる簡単な方法はありますか?たとえば、次のようなマスクがある場合:

010
111
010

私はそれを反転させてこれを取得したいと思います:

101
000
101

注:私はOpenCVのPythonバインディングを使用しているため、マスクの各要素をループするだけでは可能ですが、実行速度が問題になる可能性があります。

28
David Wolever

8ビットのマスクがある場合は、mask = 255 - mask。 cv :: Mat減算演算子は、要素ごとのスカラー減算を行うためにオーバーロードされています。

31
Matt Montag

cv2.bitwise_not(mask)はここで役立ちます

30
Rikesh Subedi

「オン」値として255を使用する8ビットマスクの場合:

mask = cv::Mat::ones(mask.size(), mask.type()) * 255 - mask;

私はまだプロジェクトの1つにOpenCV 2.1.0を使用しているので、Matt Mソリューションの代わりにこれを使用しています。

7
Andres Hurtis

このようなものが、定型入力にさまざまなゼロ以外の値が含まれる可能性がある場合に対処できると思います。

cv::Mat1b inputMask = ....;
cv::Mat1b invertedMask(inputMask.rows, inputMask.cols);

std::transform(
    inputMask.begin(), inputMask.end(), invertedMask.begin(),
    std::logical_not<uint8_t>()
);
0
Owen