【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 结束语

没啦。

相关推荐
飞哥数智坊11 小时前
GPT-5-Codex 发布,Codex 正在取代 Claude
人工智能·ai编程
倔强青铜三12 小时前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
虫无涯12 小时前
Dify Agent + AntV 实战:从 0 到 1 打造数据可视化解决方案
人工智能
Dm_dotnet14 小时前
公益站Agent Router注册送200刀额度竟然是真的
人工智能
算家计算15 小时前
7B参数拿下30个世界第一!Hunyuan-MT-7B本地部署教程:腾讯混元开源业界首个翻译集成模型
人工智能·开源
机器之心15 小时前
LLM开源2.0大洗牌:60个出局,39个上桌,AI Coding疯魔,TensorFlow已死
人工智能·openai
Juchecar16 小时前
交叉熵:深度学习中最常用的损失函数
人工智能
林木森ai16 小时前
爆款AI动物运动会视频,用Coze(扣子)一键搞定全流程(附保姆级拆解)
人工智能·aigc
聚客AI17 小时前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
BeerBear18 小时前
【保姆级教程-从0开始开发MCP服务器】一、MCP学习压根没有你想象得那么难!.md
人工智能·mcp