OpenCV(图像明度)
1. 图像明度(Brightness)
明度(Brightness)是图像中反映光亮程度的一个属性,通常用于描述像素的亮度水平。
对于RGB图像,明度(Luminance)每个像素中红、绿、蓝通道的加权和。
这个公式是基于人眼对不同颜色的敏感度,绿光对明度的贡献最大,红光次之,蓝光最小。
2. 明度调整的原理
调整明度的基本原理是对每个像素的RGB值进行加减操作,使像素的整体亮度提高或降低。
其中 是明度调整的量, 函数用于确保值在0到255的范围内。
3. 示例
用于调整RGB图像的明度。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
// 调整明度的函数
void adjustBrightness(const Mat& src, Mat& dst, int brightness) {
// 创建输出图像,并初始化为与原图像相同的尺寸和类型
dst = Mat::zeros(src.size(), src.type());
// 遍历每个像素并调整明度
for (int y = 0; y < src.rows; y++) {
for (int x = 0; x < src.cols; x++) {
for (int c = 0; c < src.channels(); c++) {
// 调整RGB通道中的每个像素值,并确保结果在[0, 255]范围内
dst.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(src.at<Vec3b>(y, x)[c] + brightness);
}
}
}
}
int main(int argc, char** argv) {
// 读取输入图像
Mat src = imread("input_image.jpg");
if (src.empty()) {
cout << "无法打开图像文件" << endl;
return -1;
}
// 定义输出图像
Mat dst;
// 明度调整值,可以是正数或负数
int brightness = 50; // 增加50单位的亮度
// 调用调整明度的函数
adjustBrightness(src, dst, brightness);
// 显示原图和调整后的图像
imshow("Original Image", src);
imshow("Brightness Adjusted Image", dst);
// 保存调整后的图像
imwrite("output_image.jpg", dst);
// 等待按键
waitKey(0);
return 0;
}
代码说明:
-
adjustBrightness()
函数:遍历图像的每个像素,对每个RGB通道的值加上brightness
参数的值。使用saturate_cast<uchar>
来确保像素值在0到255之间,防止溢出或下溢。 -
主程序:读取输入图像,调用
adjustBrightness()
函数来调整图像的亮度,并显示原始图像和处理后的图像。
结果:
brightness
为正值时,图像整体会变得更亮。brightness
为负值时,图像整体会变得更暗。
这种方法非常直观,但也存在局限性,例如如果过度提高亮度,可能会导致图像细节丢失或过度曝光。因此,实际应用中通常需要结合其他图像处理技术来改善效果。
分类:
图像算法 / OpenCV
标签:
图像算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)