我尝试在两张bitwise_or
张图片上使用CV_8UC1
,但结果并非我的预期。
在我的情况下,对于 image_1 ,每个像素值都设置为2,而对于 image_2 ,每个像素值都设置为3,即{{1}的输出是一个图像,每个像素值设置为5,而我所期望的是每个像素值是2 | 3,应该是2.
有人可以告诉我为什么吗?
答案 0 :(得分:3)
2和3之间的按位或运算结果为3.您可以这样检查:
cout<<(2|3); // The result will be 3
另外,如果你在分别包含所有像素2和3的两个矩阵上进行bitwise_or
,你应该得到一个矩阵,其所有像素都设置为3,如下例所示:
Mat m1 = Mat(3, 3, CV_8UC1, Scalar(2));
Mat m2 = Mat(3, 3, CV_8UC1, Scalar(3));
Mat r;
bitwise_or(m1, m2, r);
cout<<r;
结果:
[3, 3, 3;
3, 3, 3;
3, 3, 3]
您要添加两张图片吗?如果是这种情况,您只需使用+
运算符,如下所示:
Mat m1 = Mat(3, 3, CV_8UC1, Scalar(2));
Mat m2 = Mat(3, 3, CV_8UC1, Scalar(3));
Mat r = m1+m2;
cout<<r;
结果:
[5, 5, 5;
5, 5, 5;
5, 5, 5]
在十进制系统中,等效或操作是最大操作。 (此外,和操作的等效操作是最小操作)。
如果这是你想要的,OpenCV提供了一个cv::max()
函数,用于计算相同大小的两个矩阵的元素最大值。这是一个例子:
Mat a = Mat::ones(3, 3, CV_8UC1) * 2;
Mat b = Mat::ones(3, 3, CV_8UC1) * 100;
cout<<a<<endl<<b<<endl;
Mat max = cv::max(a, b);
cout<<max;
结果是:
a=[2, 2, 2;
2, 2, 2;
2, 2, 2]
b=[100, 100, 100;
100, 100, 100;
100, 100, 100]
max=[100, 100, 100;
100, 100, 100;
100, 100, 100]