【OpenCV】图像算术操作

1 前言

介绍图像算术操作,以及其可以实现的图像亮度、对比度调整效果。相关API:

  • add()

  • subtract()

  • multiply()

  • divide()

  • addWeighted()

2 代码及内容

cpp 复制代码
#include "iostream"
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int argc, char *argv)
{
	//【图像加减乘除操作】
	/*	
	//首先读入两幅图像,并显示出来。
	Mat src1 = imread("C:/Users/Administrator/Desktop/Zooey.png");
	Mat src2 = imread("C:/Users/Administrator/Desktop/5.png");
	if (src1.empty() || src2.empty())
	{
		cout << "could not find image file" << endl;
		return -1;
	}
	imshow("input1", src1);
	imshow("input2", src2);

	//算术操作
	Mat dst1;
	add(src1, src2, dst1);		//加
	imshow("add-demo", dst1);

	Mat dst2;
	subtract(src1, src2, dst2);	//减,注意参数顺序,src1-src2,转到定义有详细介绍
	imshow("subtract-demo", dst2);

	Mat dst3;
	multiply(src1, src2, dst3);	//乘
	imshow("multiply-demo", dst3);

	Mat dst4;
	divide(src1, src2, dst4);	//除,注意参数顺序,src1/src2,转到定义有详细介绍
	imshow("divide-demo", dst4);
	*/

	//【亮度、对比度调整】
	//图像亮度调整(实际上就是像素的加减操作,所有像素值加减相同的值)
	Mat src = imread("C:/Users/Administrator/Desktop/Zooey.png");
	imshow("input", src);
	Mat black = Mat::zeros(src.size(), src.type());		//创建一个大小、类型都和原图一样的黑色图像(像素值全为0)
	black = Scalar(40, 40, 40);				//设置每个像素的值,为后面的算术操作做准备
	Mat dst1;							//算术操作后接收结果的Mat对象
	subtract(src, black, dst1);			//减法操作
	imshow("亮度调整", dst1);

	//图像对比度调整(实际上就是像素的乘法操作,所有像素值乘以相同的值,它们之间的差值变大,对比度就变大了),下面的API(方法、函数)既可以调整比对度也可以调整亮度。
	Mat dst2;
	addWeighted(src, 1.2, black, 0.5, 0.0, dst2);	//提供的API。dst = src1*alpha + src2*beta + gamma;活用转到定义。alpha第二参数,beta第四参数,gamma第五参数。
	imshow("对比度与亮度调整", dst2);

	waitKey(0);
	destroyAllWindows();
	return 0;
}

代码分为两部分,一部分是基础算术操作,一部分是对比度,亮度调整。运行时分别注释。

代码中都注释的很清楚,也就是几个API的使用,在使用官方API时,要活用转到定义,官方都会有自己的注释说明。

要明确亮度和对比度调整的原理是什么:

  • 亮度:所有像素值同加减相同的值,实现整体黑白度的变化。

  • 对比度:所有像素值同乘相同的值,这样像素值间的差距会变大(2和4,差2,同乘2,变4和8,差4),实现整体色彩对比度变化。

Note:对RGB图像来说,像素值越大,亮度越高。

  • 黑色(0,0,0)

  • 白色(255,255,255)

演示:

代码后半部分的亮度、对比度调整。

3 结束语

没啦。

相关推荐
搏博2 分钟前
神经网络问题之一:梯度消失(Vanishing Gradient)
人工智能·机器学习
z千鑫2 分钟前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
YRr YRr11 分钟前
深度学习:神经网络的搭建
人工智能·深度学习·神经网络
威桑13 分钟前
CMake + mingw + opencv
人工智能·opencv·计算机视觉
爱喝热水的呀哈喽17 分钟前
torch张量与函数表达式写法
人工智能·pytorch·深度学习
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
大白要努力!1 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
LZXCyrus1 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。2 小时前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
YRr YRr2 小时前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络