OpenCV数字图像处理基于C++:算术运算和逻辑运算
图像的算数运算是对图像进行加减运算,而图像的逻辑运算是对图像进行与、或、非、异或等逻辑运算。通过算术运算可以让图像来达到图像增强的效果;通过逻辑运算对图像进行分割、图像增强、图像识别、图像复原等操作。
加法运算(合并两张图片,注意图片格式大小要一致)
特点:输出图像像素的灰度仅取决于两幅或两幅以上的输入图像的对应像素灰度值。算术运算结果和参与运算像素的邻域内像素的灰度值无关。算术运算不会改变像素的空间位置。
减法运算:将同一景物在不同时间拍摄的图像或同一景物在不同坡段的图像相减,常称为差影法。
差值图像提供了图像间的差值信息,能用于指导动态监测,运动目标的检测与跟踪,图像背景的消除及目标识别等。
主要应用举例:差影法(检测同一场景两幅图像之间的变化),混合图像的分离
乘法运算
图像的乘法运算就是将两幅图像对应的灰度值或彩色分量进行相乘。
乘运算的主要作用是抑制图像的某些区域,掩膜值置为1,否则置为0。乘运算有时也被用来实现卷积或相关的运算。
主要应用: 1.图像的局部显示 2.改变图像的灰度级
除法运算
图像的乘法运算就是将两幅图像对应的灰度值或彩色分量进行相除。
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main() {
Mat src1 = imread("E://img//lena2.jpg");//读取图片1
Mat src2 = imread("E://img//zi3.jpg");//读取图片2
resize(src2, src2, src1.size());
if (src1.empty() || src2.empty()) {
printf("Could not find image file");
return -1;
}
imshow("input1", src1);//显示图片1
imshow("input2", src2);//显示图片2
//代码演示
Mat dst1;
add(src1, src2, dst1);//加法操作输入图片1,图片2,输出图片3
imshow("add-demo", dst1);
Mat dst2;
subtract(src1, src2, dst2);//减法操作输入图片1,图片2,输出图片3
imshow("subtract-demo", dst2);
Mat dst3;
multiply(src1, src2, dst3);//乘法操作输入图片1,图片2,输出图片3
imshow("multiply-demo", dst3);
Mat dst4;
divide(src1, src2, dst4);//除法操作输入图片1,图片2,输出图片3
imshow("divide-demo", dst4);
waitKey(0);
destroyAllWindows();
return 0;
}
互换src1和src2
Mat src1 = imread("E://img//lena2.jpg");//读取图片1
Mat src2 = imread("E://img//zi3.jpg");//读取图片2
resize(src2, src2, src1.size());
if (src1.empty() || src2.empty()) {
printf("Could not find image file");
return -1;
}
imshow("input1", src1);//显示图片1
imshow("input2", src2);//显示图片2
//代码演示
Mat dst1;
bitwise_and(src1, src2, dst1); //位操作与
imshow("bitwise_and-demo", dst1);
Mat dst2;
bitwise_or(src1, src2, dst2);//位操作或
imshow("bitwise_or", dst2);
Mat dst3;
bitwise_not(src1,dst3);//取反操作
imshow("bitwise_not", dst3);
Mat dst4;
bitwise_xor(src1,src2, dst4);//异或操作
imshow("bitwise_xor", dst4);
权重操作调节亮度
Mat src = imread("E://img//lena2.jpg");
imshow("input", src);
Mat black = Mat::zeros(src.size(), src.type());
black = Scalar(127, 127, 127);
Mat dst2;
addWeighted(src, 1.2, black, 0.5, 0.0, dst2);
imshow("dst2", dst2);