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

时间:2013-01-18 18:52:11

标签: c++ opencv

我有这个矩阵,

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

4 个答案:

答案 0 :(得分:4)

如果您只有oneszeros,则可以执行此操作:

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 

它会为您节省一些字母