2

我有这个矩阵,

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;
}
4

4 回答 4

4

如果你只有onesand zeros,你可以这样做:

cv::Mat b = 1 - a;

于 2013-01-18T19:26:43.090 回答
3

另一种选择是

dst = 1 - src;

尽管如果您最终得到数组中不在 [1, 0] 中的任何内容,这将失败。

于 2013-01-18T19:27:46.380 回答
1

尝试这个:

dst = src ? 0 : 1;

这会将src值隐式转换为bool.
请注意,任何其他src1也将设置为0使用该语句。

于 2013-01-18T19:02:20.267 回答
1

这是另一个解决方案

dst = !src 

它可以节省您输入的一些字母

于 2013-01-18T19:23:26.913 回答