003-OpenCV(C++)加减乘除,利用加法调整图像亮度,调整图像亮度与对比度

.加减乘除

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;
}

 输出结果:

003-OpenCV(C++)加减乘除,利用加法调整图像亮度,调整图像亮度与对比度_第1张图片

处理越界:

如果用uchar类型表示一个图像,假设两个图像都是255,加起来就是500,由于uchar是8位表示不了五百,图像就有了越界,实际上OpenCV在实际操作中会根据越界来进行一个处理,如果大于255的话就会让它等于255,如果它小于0的话,就会让它等于0,0-255正好是我们uchar可以表示的范围。

图像亮度:

.黑色:(0,0,0)

.白色:(255,255,255)

.对于RGB图像来说,亮度越大值越高

图像对比度:

.对比度-图像细节信息

.addWeight函数

.伪装一下透明度:(如图所示,右图为伪装了透明度之后的输出显示,有种朦胧感)003-OpenCV(C++)加减乘除,利用加法调整图像亮度,调整图像亮度与对比度_第2张图片

利用加法调整图像亮度

代码演示:

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);//结果显示图片亮度增加

输出结果:亮度明显增加

003-OpenCV(C++)加减乘除,利用加法调整图像亮度,调整图像亮度与对比度_第3张图片 减法亦是如此:

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);//结果显示图片亮度增加

输出结果亮度明显降低 

003-OpenCV(C++)加减乘除,利用加法调整图像亮度,调整图像亮度与对比度_第4张图片 调整图像的亮度与对比度:

 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);

输出结果:

003-OpenCV(C++)加减乘除,利用加法调整图像亮度,调整图像亮度与对比度_第5张图片

你可能感兴趣的:(OpenCV初级,opencv,c++)