(7)OpenCV 4 学习之像素逻辑操作

文章目录

      • 前言
      • 一、函数解析
        • 1、与(bitwise_and)
        • 2、或(bitwise_or)
        • 3、非(bitwise_not)
        • 4、异或(bitwise_xor)
      • 二、代码示例
      • 三、结果展示
      • 四、官方教程


前言

最近心血来潮,想具体的去学习一下图像处理,所以报了知识星球的一个OpenCV研习社,将自己每天的学习,分享一下。写个 blog 加深一下知识。


一、函数解析

1、与(bitwise_and)

CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,
                              OutputArray dst, InputArray mask = noArray());

参数一:第一个输入数组或标量。
参数二:第二个输入数组或一个标量。
参数三:输出与输入具有相同大小和类型的数组。
参数四:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。

功能:两个数组的每个元素按位进行与操作(&)。

2、或(bitwise_or)

CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,
                             OutputArray dst, InputArray mask = noArray());
                             
参数一:第一个输入数组或标量。
参数二:第二个输入数组或一个标量。
参数三:输出与输入具有相同大小和类型的数组。
参数四:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。

功能:两个数组的每个元素按位进行或操作(|)。

3、非(bitwise_not)

CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,
                              InputArray mask = noArray());

参数一:第一个输入数组或标量。
参数二:输出与输入具有相同大小和类型的数组。
参数三:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。

功能:对数组的每一位取非。

补充说明:针对输入图像, 图像取反操作,二值图像分析中经常用

4、异或(bitwise_xor)

CV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,
                              OutputArray dst, InputArray mask = noArray());

参数一:第一个输入数组或标量。
参数二:第二个输入数组或一个标量。
参数三:输出与输入具有相同大小和类型的数组。
参数四:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。

功能:两个数组的每个元素按位进行异或操作(⊕)。


二、代码示例

int main(int argc, char* argv[])
{
	//创建一个空白图像
	Mat src1 = Mat::zeros(Size(400, 400), CV_8UC3);
	//创建一个2D矩形类,起点(100,100),长、宽:100
	Rect rect(100, 100, 100, 100);
	//Scalar 最多存放4个数值的数组,一般用来存放像素值
	src1(rect) = Scalar(0, 0, 255);
	imshow("input1", src1);
	printf("create first image....\n");

	Mat src2 = Mat::zeros(Size(400, 400), CV_8UC3);
	rect.x = 150;
	rect.y = 150;
	src2(rect) = Scalar(0, 255, 255);
	imshow("input2", src2);
	printf("create second image....\n");

	Mat dst1, dst2, dst3;
	bitwise_and(src1, src2, dst1);
	bitwise_xor(src1, src2, dst2);
	bitwise_or(src1, src2, dst3);

	imshow("dst1", dst1);
	imshow("dst2", dst2);
	imshow("dst3", dst3);

	Mat src = imread("C:/Users/XMuser/Desktop/Opencv/test.png");
	if (src.empty())
	{
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);

	Mat dst4;
	bitwise_not(src, dst4);
	imshow("dst4", dst4);

	waitKey(0);
	return 0;
}


三、结果展示

与操作结果:
(7)OpenCV 4 学习之像素逻辑操作_第1张图片
异或操作结果:
(7)OpenCV 4 学习之像素逻辑操作_第2张图片
或操作结果:
(7)OpenCV 4 学习之像素逻辑操作_第3张图片
非操作结果:
(7)OpenCV 4 学习之像素逻辑操作_第4张图片

四、官方教程

传送门:官方教程 ---- bitwise_and、bitwise_or、bitwise_xor、bitwise_not
(7)OpenCV 4 学习之像素逻辑操作_第5张图片
(7)OpenCV 4 学习之像素逻辑操作_第6张图片
(7)OpenCV 4 学习之像素逻辑操作_第7张图片
(7)OpenCV 4 学习之像素逻辑操作_第8张图片

你可能感兴趣的:(OpenCV,4.0)