如何在范围为[0,1]的矩阵中切换元素

How to toggle elements in a matrix with range[0,1]?

本文关键字:元素 范围      更新时间:2023-10-16

我有这个矩阵

0 1 0
1 0 1
0 1 0

我想把每个1值的元素都改为0,反之亦然

1 0 1
0 1 0
1 0 1

如果我使用位补算符,也就是dst = ~src,我得到了这个结果

255 254 255
254 255 254
255 254 255

当然,我可以通过一些算术和循环得到我想要的结果。但是有什么简单的方法来实现我想在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;
}

如果您只有oneszeros,您可以这样做:

cv::Mat b = 1 - a;

还有一个选项是

dst = 1 - src;

但是如果你的数组中有不属于[1,0]的内容,这将会失败

试试这个:

dst = src ? 0 : 1;

这将隐式地将src值转换为bool
注意,1以外的任何src值也将使用该语句设置为0

这是另一个解决方案

dst = !src 

输入

可以节省一些字母