有没有一种简单的方法可以使用OpenCV反转掩码?例如,如果我有这样的面具:
010
111
010
我想反过来并得到这个:
101
000
101
注意:我正在使用OpenCV的Python绑定,因此虽然可能只是循环遍历掩码中的每个元素,但执行速度可能会成为一个问题。
答案 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>()
);