【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 小时前
VsCode+Roo Code+Gemini 2.5 Pro+Gemini Balance AI辅助编程环境搭建(理论上通过多个Api Key负载均衡达到无限免费Gemini 2.5 Pro)
前端·人工智能·vscode·后端·语言模型·负载均衡·ai编程
普通网友2 小时前
微服务注册中心与负载均衡实战精要,微软 2025 年 8 月更新:对固态硬盘与电脑功能有哪些潜在的影响。
人工智能·ai智能体·技术问答
苍何2 小时前
一人手搓!AI 漫剧从0到1详细教程
人工智能
苍何2 小时前
Gemini 3 刚刷屏,蚂蚁灵光又整活:一句话生成「闪游戏」
人工智能
苍何2 小时前
越来越对 AI 做的 PPT 敬佩了!(附7大用法)
人工智能
苍何2 小时前
超全Nano Banana Pro 提示词案例库来啦,小白也能轻松上手
人工智能
阿杰学AI3 小时前
AI核心知识39——大语言模型之World Model(简洁且通俗易懂版)
人工智能·ai·语言模型·aigc·世界模型·world model·sara
智慧地球(AI·Earth)3 小时前
Vibe Coding:你被取代了吗?
人工智能
大、男人4 小时前
DeepAgent学习
人工智能·学习
测试人社区—66794 小时前
提升测试覆盖率的有效手段剖析
人工智能·学习·flutter·ui·自动化·测试覆盖率