OpenCVを使用してマスクを反転させる簡単な方法はありますか?たとえば、次のようなマスクがある場合:
010
111
010
私はそれを反転させてこれを取得したいと思います:
101
000
101
注:私はOpenCVのPythonバインディングを使用しているため、マスクの各要素をループするだけでは可能ですが、実行速度が問題になる可能性があります。
8ビットのマスクがある場合は、mask = 255 - mask
。 cv :: Mat減算演算子は、要素ごとのスカラー減算を行うためにオーバーロードされています。
cv2.bitwise_not(mask)
はここで役立ちます
「オン」値として255を使用する8ビットマスクの場合:
mask = cv::Mat::ones(mask.size(), mask.type()) * 255 - mask;
私はまだプロジェクトの1つにOpenCV 2.1.0を使用しているので、Matt Mソリューションの代わりにこれを使用しています。
このようなものが、定型入力にさまざまなゼロ以外の値が含まれる可能性がある場合に対処できると思います。
cv::Mat1b inputMask = ....;
cv::Mat1b invertedMask(inputMask.rows, inputMask.cols);
std::transform(
inputMask.begin(), inputMask.end(), invertedMask.begin(),
std::logical_not<uint8_t>()
);