网站兼容代码,亚马逊做网站,西班牙语网站建设注意事项,oppo软件商店下载目录 一、算法概述1、逻辑运算2、函数解析3、用途 二、代码实现三、结果展示 OpenCV——图像按位运算由CSDN点云侠原创#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章#xff0c;那么此处便是不要脸的爬虫。
一、算法概述
1、逻辑运算 OpenCV4 针对两个图像之… 目录 一、算法概述1、逻辑运算2、函数解析3、用途 二、代码实现三、结果展示 OpenCV——图像按位运算由CSDN点云侠原创爬虫自重。如果你不是在点云侠的博客中看到该文章那么此处便是不要脸的爬虫。
一、算法概述
1、逻辑运算 OpenCV4 针对两个图像之间的“与”、“或”、“异或”、以及“非”运算分别提供了bitwise_and()、bitwise_or()、bitwise_xor()、bitwise_not()函数。图像像素间的逻辑运算与数字间的逻辑运算相同具体规则见表1。图像的“非”运算只针对一个数值进行因此在表1中对像素求非运算时对图像1的像素进行“非”运算。如果像素取值只有0和1那么表1中的前4行数据正好对应了所有的运算规则但是CV_8U类型的图像像素值从0取到255此时的逻辑运算就需要将像素值转成二进制后再进行因此CV_8U类型是8位数据对0求非是11111111也就是255.在表1的最后一行数据中像素5对应的二进制为101像素值6对应的二进制是110因此“与”运算得100(4)“或”运算得011(3)对像素5进行非运算得11111010250。 表1 图像逻辑运算规则 | 图像数据类型 | 像素值1| 像素值2 |与|或|异或|非图像 | ------ | ------ | ------ |------ |------ |------ |------ |------ |------ | | 二值 | 0 | 0 |0|0|0|1| | 二值 | 1 | 0 |0|1|1|0| | 二值 | 0 | 1 |0|1|1|1| | 二值 | 1 | 1 |1|1|0|0| | 8位 | 0 | 0 |0|0|0|255| | 8位 | 5| 6 |4|7|3|250|
2、函数解析
//像素求“与”运算
void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask noArray());//像素求“或”运算
void bitwise_or(InputArray src1, InputArray src2,OutputArray dst, InputArray mask noArray());//像素求“异或”运算
void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask noArray());//像素求“非”运算
void bitwise_not(InputArray src, OutputArray dst,InputArray mask noArray());src1第一个图像矩阵可以是多通道图像数据。src2第二个图像矩阵尺寸、通道数和数据类型都需要与src1一致。dst逻辑运算输出结果尺寸、通道数和数据类型都与src1一致。mask掩膜用于设置图像或矩阵中逻辑运算的范围。 在进行逻辑运算时一定要保证两个两个图像矩阵之间的尺寸、数据类型和通道数相同多个通道进行逻辑运算时不同通道之间是独立运行的。
3、用途 按位运算的用途比如要得到一个加logo的图像。如果将两幅图片直接相加会改变图片的颜色如果用图像混合则会改变图片的透明度这时候就需要用按位操作既不改变图像颜色又不改变图像透明度类似PS。
二、代码实现
#include opencv2\opencv.hpp
#include iostream
#include vector
using namespace std;
using namespace cv;
int main()
{Mat img imread(X8.jpg);if (img.empty()){cout 请确认图像文件名称是否正确 endl;return -1;}//1、创建两个黑白图像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);//-----------------------------------------------------------------// 在进行逻辑运算时一定要保证两个两个图像矩阵之间的尺寸、数据类型// 和通道数相同多个通道进行逻辑运算时不同通道之间是独立运行的。//-----------------------------------------------------------------//2、进行逻辑运算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);return 0;
}三、结果展示