我有这个矩阵,
0 1 0
1 0 1
0 1 0
我想将每个1值元素切换为0,反之亦然:
1 0 1
0 1 0
1 0 1
如果我使用bitwise complement operator,即dst = ~src
我得到了此结果
255 254 255
254 255 254
255 254 255
对于cource我可以通过一些算术和循环得到我想要的结果。但是有没有简单的方法来实现我想要的OpenCV矩阵?感谢。
更新
以下是代码段:
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
int main()
{
cv::Mat a = (cv::Mat_<uchar>(3,3) << 0, 1, 0,
1, 0, 1,
0, 1, 0 );
cv::Mat b = ~a;
std::cout << b << std::endl;
return 0;
}
答案 0 :(得分:4)
如果您只有ones
和zeros
,则可以执行此操作:
cv::Mat b = 1 - a;
答案 1 :(得分:3)
还有一个选择是
dst = 1 - src;
虽然如果你最终得到数组中不在[1,0]中的任何东西,这将会失败。
答案 2 :(得分:1)
试试这个:
dst = src ? 0 : 1;
这会隐式将src
值转换为bool
请注意,除src
之外的任何其他1
值也将使用该语句设置为0
。
答案 3 :(得分:1)
这是另一种解决方案
dst = !src
它会为您节省一些字母