OpenCV 3.1中没有布尔值



我想知道是否有一种简单的方法可以对cv::Mat执行布尔"not"运算。这不起作用:

cv::Mat mat = cv::Mat::ones(3,3, CV_8U);
cv::Mat mat_not = !mat;

因此,有没有一种有效或简单的方法可以做到这一点?我应该使用这样的东西吗:

cv::Mat mat_not = mat < cv::Mat::ones(3,3,CV_8U);

非常感谢!

编辑:我混淆了MATLAB和C++之间的"not"运算符(因为我正在将第一个运算符转换为另一个)。这很好:

cv::Mat map2 = ~map1;

编辑:2016年7月20日下午12:30

我看到op想要一个常规的NOT,我已经习惯了IDL和MatLab等的不同。

正如@cxyzs7、@Cedric和@Miki所提到的,c++中的运算符是~so。。。

mat = ~mat;

然而,如果你想在大多数时候做其他元素(例如位),那么已经有了一个完整的函数。即…

逐位_非

cv::Mat src;
src = stuff;
cv::Mat dst;
//then call it
bitwise_not(src,dst);

如果你想逐个元素执行的函数在库中不存在,或者不是重载运算符,你总是可以用暴力的方式执行。。。

for(...) {
     for (...) {
        dst.at<int>(i,j) = ! src.at<int>(i,j);
     }
}

相关内容

  • 没有找到相关文章

最新更新