彩色图像自动亮度调整方法 opencv c++代码实现
时间: 2023-09-13 11:08:06 浏览: 233
彩色图像的自动亮度调整可以通过以下步骤实现:
1. 将彩色图像转换为灰度图像。
2. 计算灰度图像的直方图,获取像素值范围和像素数量分布情况。
3. 找到直方图中的最小像素值和最大像素值。
4. 根据最小像素值和最大像素值,计算出调整后的最小像素值和最大像素值。
5. 对原始彩色图像进行像素值的重新映射,将最小像素值映射到调整后的最小像素值,将最大像素值映射到调整后的最大像素值,同时将中间像素值按比例进行映射。
以下是OpenCV C++代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取彩色图像
Mat img = imread("test.jpg");
// 转换为灰度图像
Mat grayImg;
cvtColor(img, grayImg, COLOR_BGR2GRAY);
// 计算灰度图像的直方图
int histSize[] = {256};
float range[] = {0, 256};
const float* ranges[] = {range};
Mat hist;
calcHist(&grayImg, 1, 0, Mat(), hist, 1, histSize, ranges);
// 找到直方图中的最小像素值和最大像素值
int minGray = 0, maxGray = 255;
for (int i = 0; i < 256; ++i)
{
if (hist.at<float>(i) > 0)
{
minGray = i;
break;
}
}
for (int i = 255; i >= 0; --i)
{
if (hist.at<float>(i) > 0)
{
maxGray = i;
break;
}
}
// 计算调整后的最小像素值和最大像素值
int minDst = 50, maxDst = 200;
int deltaSrc = maxGray - minGray;
int deltaDst = maxDst - minDst;
double scale = deltaDst / static_cast<double>(deltaSrc);
int shift = minDst - static_cast<int>(minGray * scale + 0.5);
// 对原始彩色图像进行像素值的重新映射
Mat dstImg;
img.convertTo(dstImg, -1, scale, shift);
// 显示原始图像和调整后的图像
imshow("Original Image", img);
imshow("Adjusted Image", dstImg);
waitKey();
return 0;
}
```
阅读全文
相关推荐
















