.加减乘除
add(输入1, 输入2,输出);
subtract(输入1, 输入2, 输出);
multiply(输入1, 输入2, 输出);
divide(输入1, 输入2, 输出);
.前提条件:输入图像的大小与类型必须一致.
代码演示加减乘除:
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char**argv) {
Mat src1 = imread("D:/OpenCV/opencv/sources/samples/data/WindowsLogo.jpg");//读取图片1
Mat src2 = imread("D:/OpenCV/opencv/sources/samples/data/LinuxLogo.jpg");//读取图片2
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;
}
输出结果:
处理越界:
如果用uchar类型表示一个图像,假设两个图像都是255,加起来就是500,由于uchar是8位表示不了五百,图像就有了越界,实际上OpenCV在实际操作中会根据越界来进行一个处理,如果大于255的话就会让它等于255,如果它小于0的话,就会让它等于0,0-255正好是我们uchar可以表示的范围。
图像亮度:
.黑色:(0,0,0)
.白色:(255,255,255)
.对于RGB图像来说,亮度越大值越高
图像对比度:
.对比度-图像细节信息
.addWeight函数
.伪装一下透明度:(如图所示,右图为伪装了透明度之后的输出显示,有种朦胧感)
利用加法调整图像亮度:
代码演示:
Mat src= imread("D:/images/flower.png");
imshow("input", src);
Mat black = Mat::zeros(src.size(), src.type());//定义一个全为0的和原图大小类型一样的图片
black = Scalar(40, 40, 40);//将定义的图片赋值全为40;
Mat dst;
add(src, black, dst);//将原图与定义的图片相加
imshow("result", dst);//结果显示图片亮度增加
输出结果:亮度明显增加
Mat src= imread("D:/images/flower.png");
imshow("input", src);
Mat black = Mat::zeros(src.size(), src.type());//定义一个全为0的和原图大小类型一样的图片
black = Scalar(40, 40, 40);//将定义的图片赋值全为40;
Mat dst;
subtract(src, black, dst);//将原图与定义的图片相减
imshow("result", dst);//结果显示图片亮度增加
输出结果亮度明显降低
addWeighted(参数1, 参数2,参数3,参数4,参数5, 参数6);
参数1读取原图,参数2增加倍数,假设原图一个像素值是4一个像素值是8,那我乘2的话一个像素值就变成16一个像素值就变成8,他们之间的差异就扩大了两倍,而我们提升图像对比度的方法就是让它的差异更加的明显。参数3和4增加图像亮度,参数3读图参数4增加倍数,然后把值加给原图以增加原图亮度,参数5加一个常量的值,参数6输出结果.
代码演示:
Mat src= imread("D:/images/flower.png");
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);
输出结果: