opencv采用伽马校正增加图片亮度
opencv采用伽马校正增加图片亮度,两种图像预处理方式对比
·
一般通过工业相机拍摄的图片会存在较暗的情况,图片质量差对于显示信息以及后续的处理都有影响,比如一下图片就是工业相机在钢管厂所拍摄的

可以看到该图片质量较差,一般会给该图片增加亮度,如以下代码:
cv::Mat image = cv::imread("C:/Users/Andy/Desktop/picture/pipes.jpg");
if (image.empty())
{
std::cerr << "Error: 无法加载图像文件" << std::endl;
return -1;
}
// 增加亮度90(自动处理溢出)
cv::Mat brightenedImage;
cv::Mat brightenedImage1;
cv::add(image, cv::Scalar(70, 70, 70), brightenedImage);
brightenedImage.convertTo(brightenedImage1, -1, 1.5, 1); // 调整对比度和亮度
// 显示处理后的图像
cv::imshow("picture", brightenedImage1);
cv::waitKey(1); // 非阻塞调用,确保窗口正常显示
可以得到结果如下:

可以看到该图片结果依旧不是很好,显得太白了,需要提高图片的对比度。所以可以选在采用伽马校正增加图片亮度,使暗的更暗,亮的更亮,提高对比度,代码如下所示:
cv::Mat enhancedSrc;
// 2. 设置伽马值(大于1降低曝光,小于1增加曝光)
double gamma = 0.49;
// 3. 创建伽马校正查找表
cv::Mat lookupTable(1, 256, CV_8U);
uchar* lut = lookupTable.ptr();
for (int i = 0; i < 256; ++i)
{
lut[i] = cv::saturate_cast<uchar>(pow(i / 255.0, gamma) * 255.0);
}
// 4. 应用伽马校正
cv::Mat adjustedImage;
cv::LUT(image, lookupTable, adjustedImage);
adjustedImage.convertTo(enhancedSrc, -1, 1.5, 1); // 调整对比度和亮度
// 显示处理后的图像
cv::imshow("picture1", enhancedSrc);
cv::waitKey(1); // 非阻塞调用,确保窗口正常显示;
结果如下:

可以明显感觉这种处理比增加亮度得到的结果更好,更能显示图片原本的信息。两种方式对比如下所示。

#include "mainwindow.h"
#include <opencv2/opencv.hpp>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 读取输入图像(需替换实际路径)
cv::Mat image = cv::imread("C:/Users/Andy/Desktop/picture/pipes.jpg");
if (image.empty())
{
std::cerr << "Error: 无法加载图像文件" << std::endl;
return -1;
}
// 增加亮度90(自动处理溢出)
cv::Mat brightenedImage;
cv::Mat brightenedImage1;
cv::add(image, cv::Scalar(70, 70, 70), brightenedImage);
brightenedImage.convertTo(brightenedImage1, -1, 1.5, 1); // 调整对比度和亮度
// 显示处理后的图像
cv::imshow("picture", brightenedImage1);
cv::waitKey(1); // 非阻塞调用,确保窗口正常显示
cv::Mat enhancedSrc;
// 2. 设置伽马值(大于1降低曝光,小于1增加曝光)
double gamma = 0.49;
// 3. 创建伽马校正查找表
cv::Mat lookupTable(1, 256, CV_8U);
uchar* lut = lookupTable.ptr();
for (int i = 0; i < 256; ++i)
{
lut[i] = cv::saturate_cast<uchar>(pow(i / 255.0, gamma) * 255.0);
}
// 4. 应用伽马校正
cv::Mat adjustedImage;
cv::LUT(image, lookupTable, adjustedImage);
adjustedImage.convertTo(enhancedSrc, -1, 1.5, 1); // 调整对比度和亮度
// 显示处理后的图像
cv::imshow("picture1", enhancedSrc);
cv::waitKey(1); // 非阻塞调用,确保窗口正常显示;
// MainWindow w;
// w.show();
return a.exec();
}
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)