本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials

本篇使用的项目为:pixel_bitwise

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, const char** argv) {
	Mat src = imread("../sample/lena512color.bmp");
	if (src.empty()) {
		cout << "could not load image..." << endl;
		return -1;
	}
	imshow("src", src);
	Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3);
	Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
	rectangle(m1, Rect(100, 100, 80, 80), Scalar(255, 255, 0), -1, LINE_8, 0);
	rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);
	imshow("m1", m1);
	imshow("m2", m2);

	Mat dst;
	bitwise_and(m1, m2, dst);
	imshow("and", dst);
	Mat mask = Mat::ones(src.size(),CV_8UC1);
	bitwise_not(src, dst, mask);
	//dst = ~src;
	imshow("not", dst);
	bitwise_or(m1, m2, dst);
	imshow("or", dst);
	bitwise_xor(m1, m2, dst);
	imshow("xor", dst);

	waitKey(0);
	destroyAllWindows();
	return 0;
}

bitwise_and:图像与操作

void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
  • src1:第一个输入图像
  • src2:第二个输入图像
  • dst:输出图像,和输入具有相同的尺寸和类型
  • mask:掩模
    • mask大小要与src保持一致
    • CV_8UC1,一般为0或255
    • src1与src2相与后再与mask做矩阵运算

bitwise_not:图像取反操作

void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());
  • src:输入图像
  • dst:输出图像,和输入具有相同的尺寸和类型
  • mask:
    • mask大小要与src保持一致
    • CV_8UC1,一般为0或255
    • src取反后再与mask做矩阵运算

bitwise_or:图像或操作

void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
  • src1:第一个输入图像
  • src2:第二个输入图像
  • dst:输出图像,和输入具有相同的尺寸和类型
  • mask:掩模
    • mask大小要与src保持一致
    • CV_8UC1,一般为0或255
    • src1与src2相或后再与mask做矩阵运算

bitwise_xor:图像异或操作

void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
  • src1:第一个输入图像
  • src2:第二个输入图像
  • dst:输出图像,和输入具有相同的尺寸和类型
  • mask:掩模
    • mask大小要与src保持一致
    • CV_8UC1,一般为0或255
    • src1与src2异或后再与mask做矩阵运算