【OpenCV实战】OpenCV实现自动调整亮度和对比度

一,基于局部直方图信息增强算法

对比度受限的自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization,简称CLAHE)是一种用于图像增强的技术,其原理主要基于自适应直方图均衡化(Adaptive Histogram Equalization,简称AHE)但增加了对比度限制来避免过度放大噪声。

CLAHE的原理可以概括为以下几个步骤:

1,图像分块:首先,将输入图像分割成多个不重叠的小块(通常称为tiles或子区域)。每个小块的大小是固定的,例如8x8或16x16像素。

2,计算直方图:对于每个小块,计算其灰度直方图。直方图描述了小块内不同灰度级别的像素数量。

3,直方图均衡化:对每个小块的直方图进行均衡化,使得小块内的像素灰度分布更加均匀。这通常是通过累积分布函数(CDF)映射来实现的,将输入灰度值映射到新的灰度值,以扩展像素灰度值的范围。

4,对比度限制:在直方图均衡化的过程中,引入一个对比度限制参数(clipLimit)。这个参数限制了直方图的高度,从而限制了对比度增强的幅度。如果一个小块的直方图高度超过了设定的限制,那么超过限制的部分将被裁剪掉,并将裁剪下来的像素均匀分布到其他灰度级别上。这个步骤的目的是避免过度放大噪声或细节。

5,双线性插值:由于图像分割成小块进行均衡化,不同小块之间的边界可能会出现不连续的情况。为了消除这种不连续性,可以使用双线性插值等方法对边界像素进行平滑处理。

6,合并输出:

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
相机自适应曝光调节算法是一种用于调整相机曝光时间的算法。该算法根据当前场景的亮度自动调整相机的曝光时间,以确保拍摄出的图像亮度对比度良好。 以下是C++实现该算法的示例代码: ```c++ #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char** argv) { // 打开摄像头 VideoCapture cap(0); if (!cap.isOpened()) { cerr << "Failed to open camera!" << endl; return -1; } // 设定曝光时间范围 int minExposure = cap.get(CAP_PROP_EXPOSURE); int maxExposure = cap.get(CAP_PROP_EXPOSURE) * 4; int exposure = minExposure; // 设定目标亮度范围 int targetBrightness = 128; int minBrightness = targetBrightness - 20; int maxBrightness = targetBrightness + 20; while (true) { Mat frame; cap >> frame; if (frame.empty()) { break; } // 计算当前帧的亮度 Mat gray; cvtColor(frame, gray, COLOR_BGR2GRAY); int brightness = static_cast<int>(mean(gray)[0]); // 根据亮度调整曝光时间 if (brightness < minBrightness) { exposure += 10; } else if (brightness > maxBrightness) { exposure -= 10; } exposure = max(min(exposure, maxExposure), minExposure); cap.set(CAP_PROP_EXPOSURE, exposure); // 显示当前帧 imshow("Frame", frame); // 按 'q' 键退出程序 if (waitKey(1) == 'q') { break; } } cap.release(); destroyAllWindows(); return 0; } ``` 在该示例代码中,我们首先打开了摄像头,并设定了曝光时间和目标亮度范围。然后,在每一帧图像中,我们计算了当前场景的亮度,并根据当前亮度调整曝光时间。最后,我们显示了当前帧,并等待用户按下 'q' 键退出程序。 需要注意的是,相机自适应曝光调节算法是一种简单的算法,在实际应用中可能需要根据实际情况进行调整和改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤舟簔笠翁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值