开发者

OpenCV: Invert a mask?

Is there a simple way to invert a mask using OpenCV? For 开发者_StackOverflow中文版example, if I've got a mask like this:

010
111
010

I'd like to invert it and get this:

101
000
101

Note: I'm using OpenCV's Python bindings, so while it would be possible to simply loop over each element in the mask, execution speed could become an issue.


cv2.bitwise_not(mask) would help here


If you have an 8-bit mask, then you should do mask = 255 - mask. cv::Mat subtraction operator is overloaded to do scalar per-element subtraction.


For an 8 bit mask using 255 as "on" value:

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

I'm using this one instead of Matt M solution as I'm still using OpenCV 2.1.0 for one of my projects.


I think something like this might handle the case where the input mask may have various non-zero values:

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜