OpenCV:反转面具?

时间:2010-07-16 00:57:43

标签: python opencv

有没有一种简单的方法可以使用OpenCV反转掩码?例如,如果我有这样的面具:

010
111
010

我想反过来并得到这个:

101
000
101

注意:我正在使用OpenCV的Python绑定,因此虽然可能只是循环遍历掩码中的每个元素,但执行速度可能会成为一个问题。

4 个答案:

答案 0 :(得分:30)

如果你有一个8位掩码,那么你应该mask = 255 - mask。 cv :: Mat减法运算符被重载以进行标量每元素减法。

答案 1 :(得分:28)

cv2.bitwise_not(mask)会有所帮助

答案 2 :(得分:7)

对于使用255作为“on”值的8位掩码:

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

我正在使用这个而不是Matt M解决方案,因为我仍然在我的一个项目中使用OpenCV 2.1.0。

答案 3 :(得分:0)

我认为这样的事情可能会处理输入掩码可能具有各种非零值的情况:

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

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