我想知道是否有一种简单的方法可以对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);
}
}