在 OpenCV 中,可以通过使用内置的函数来对图像进行亮度增强。对于单通道 8-bit 数据,你可以使用 cv::convertScaleAbs
函数,它允许你按比例缩放图像的值,同时加上一个偏移量。这使得增加亮度变得简单。
示例代码
以下是一个示例代码,展示如何读取一幅单通道灰度图像,对其进行亮度增强,然后保存结果:
#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 读取图像(确保为单通道灰度图)
cv::Mat image = cv::imread("path_to_your_image.jpg", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
std::cerr << "Error: Unable to load image!" << std::endl;
return -1;
}
// 设置亮度增量
int brightnessValue = 50; // 增加的亮度值
// 使用 convertScaleAbs 函数进行亮度增强
cv::Mat enhancedImage;
image.convertTo(enhancedImage, CV_8UC1, 1.0, brightnessValue); // scale=1.0 (不缩放),bias=brightnessValue
// 显示原始和增强后的图像
cv::imshow("Original Image", image);
cv::imshow("Enhanced Image", enhancedImage);
// 等待用户按键
cv::waitKey(0);
// 保存增强后的图像
cv::imwrite("enhanced_image.jpg", enhancedImage);
return 0;
}
注意事项
- 输入路径:请确保将
"path_to_your_image.jpg"
替换为你的实际图像路径。 - 亮度增量:
brightnessValue
是增加的亮度值,可以根据需求调整。 - 显示和保存:程序会显示原始和增强后的图像,并将结果保存到
enhanced_image.jpg
文件中。 - 单通道:该代码假定输入是单通道(灰度)图像。如果你处理的是彩色图像,需要先转换为灰度模式。
总结
通过上述代码,你可以方便地对单通道 8-bit 图像进行亮度增强,而无需手动遍历每个像素,这样能提高效率并简化实现。希望这对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问