最近心血来潮,想具体的去学习一下图像处理,所以报了知识星球的一个OpenCV研习社,将自己每天的学习,分享一下。写个 blog 加深一下知识。
CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,
OutputArray dst, InputArray mask = noArray());
参数一:第一个输入数组或标量。
参数二:第二个输入数组或一个标量。
参数三:输出与输入具有相同大小和类型的数组。
参数四:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。
功能:两个数组的每个元素按位进行与操作(&)。
CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,
OutputArray dst, InputArray mask = noArray());
参数一:第一个输入数组或标量。
参数二:第二个输入数组或一个标量。
参数三:输出与输入具有相同大小和类型的数组。
参数四:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。
功能:两个数组的每个元素按位进行或操作(|)。
CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,
InputArray mask = noArray());
参数一:第一个输入数组或标量。
参数二:输出与输入具有相同大小和类型的数组。
参数三:操作掩码;8位单通道数组,用于指定要更改的输出数组的元素。
功能:对数组的每一位取非。
补充说明:针对输入图像, 图像取反操作,二值图像分析中经常用
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;
}
传送门:官方教程 ---- bitwise_and、bitwise_or、bitwise_xor、bitwise_not