位操作
逻辑门
简介
- 逻辑门(Logic Gates)是在集成电路(Integrated Circuit)上的基本组件。简单的逻辑门可由晶体管组成。这些晶体管的组合可以使代表两种信号的高低电平在通过它们之后产生高电平或者低电平的信号。高、低电平可以分别代表逻辑上的“真”与“假”或二进制当中的1和0,从而实现逻辑运算
- 逻辑运算是指对二进制数各数字位的0和1分别进行处理的运算,包括逻辑非(NOT运算)、逻辑与(AND运算)、逻辑或(OR运算)和逻辑异或(XOR运算)四种
类型 | 名称 | 短释 | 逻辑函数表示 | 真值表 |
---|---|---|---|---|
AND | 逻辑与 | 所有输入为高时,才会有高的输出。一低出低。 | A * B | |
OR | 逻辑或 | 所有输入为低时,才会有低的输出。一高出高。 | A + B | |
NOT | 逻辑非 | 输入的高低状态会逆转。 | A' | |
XOR | 逻辑异或 | 输入相同时输出为低,否则为高。 | A' * B + A * B' | |
图像的逻辑运算
简介
-
图像像素间的逻辑运算与数字间的逻辑运算相同
-
在进行逻辑运算时,一定要保证两个图像矩阵之间的尺寸、数据类型和通道数相同
-
多个通道进行逻辑运算时不同通道之间是独立进行的
函数
void cv::bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray())
void cv::bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray())
void cv::bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray())
void cv::bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray())
- src:图像矩阵或标量
- dst:逻辑运算输出结果,尺寸、通道数和数据类型都需要与输出图像一致
- mask:掩模,用于设置图像或矩阵中逻辑运算的范围
示例代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("/home/kslas/OpenCV/test.jpg");
// 创建两个黑白图像
Mat img0 = Mat::zeros(200, 200, CV_8UC1);
Mat img1 = Mat::zeros(200, 200, CV_8UC1);
Rect rect0(50, 50, 100, 100);
img0(rect0) = Scalar(255);
Rect rect1(100, 100, 100, 100);
img1(rect1) = Scalar(255);
imshow("img0", img0);
imshow("img1", img1);
// 进行逻辑运算
Mat myAnd, myOr, myXor, myNot, imgNot;
bitwise_not(img0, myNot);
bitwise_and(img0, img1, myAnd);
bitwise_or(img0, img1, myOr);
bitwise_xor(img0, img1, myXor);
bitwise_not(img, imgNot);
imshow("myAnd", myAnd);
imshow("myOr", myOr);
imshow("myXor", myXor);
imshow("myNot", myNot);
imshow("img", img);
imshow("imgNot", imgNot);
waitKey(0);
destroyAllWindows();
return 0;
}
运行结果: