opencv-c++降低曝光度
时间: 2024-02-13 09:59:08 浏览: 120
以下是使用OpenCV C++降低曝光度的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
cv::Mat img = cv::imread("input.jpg");
cv::Mat dst;
float gamma = 0.5; // 设置gamma值,范围为0到1
cv::Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.ptr();
for (int i = 0; i < 256; i++) {
p[i] = cv::saturate_cast<uchar>(pow(i / 255.0, gamma) * 255.0);
}
cv::LUT(img, lookUpTable, dst);
cv::imshow("Input", img);
cv::imshow("Output", dst);
cv::waitKey(0);
return 0;
}
```
这段代码首先读取输入图像,然后通过设置gamma值来创建一个查找表(look-up table),该查找表将输入图像的像素值映射到降低曝光度后的像素值。最后,使用`cv::LUT`函数将输入图像应用于查找表,得到降低曝光度后的输出图像。
请注意,这里的输入图像文件名为"input.jpg",你需要将其替换为你自己的图像文件名。
相关问题
c++ opencv 调整曝光度
要调整图像的曝光度,可以使用 OpenCV 库中的 `convertTo` 函数。
这个函数可以将一个图像从一个数据类型转换为另一个数据类型,并且可以对像素值进行缩放、平移等操作。
下面是一个简单的示例代码,演示如何使用 `convertTo` 函数来调整图像的曝光度:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("test.jpg");
// 调整曝光度
Mat result;
img.convertTo(result, -1, 2.0, 0);
imshow("Original Image", img);
imshow("Adjusted Image", result);
waitKey(0);
return 0;
}
```
在代码中,我们首先读取一张图片 `test.jpg`,然后使用 `convertTo` 函数将其转换为另一个 `Mat` 对象 `result`。
`convertTo` 函数的第一个参数是输出图像的变量名,第二个参数是输出图像的数据类型,如果设置为 -1,则表示输出图像与原始图像使用相同的数据类型。
第三个参数是像素值的缩放因子,这里我们将其设置为 2.0,表示将像素值乘以 2.0。
第四个参数是像素值的平移量,这里我们将其设置为 0,表示不进行平移。
最后,我们将原始图像和调整后的图像分别显示出来,以便比较它们之间的差异。
opencv低光照图像增强c++
### 使用C++和OpenCV实现低光照图像增强
对于低光照条件下的图像增强,一种有效的方法是采用多尺度自适应Gamma矫正技术。这种方法能够显著改善图像亮度并保留更多细节[^1]。
#### 方法一:多尺度自适应Gamma矫正
此方法通过调整不同尺度上的伽马值来优化整个图像的质量。具体来说,在较小尺度上应用较高的伽马值以增加局部对比度;而在较大尺度则保持较低的伽马值防止过度曝光。最终将各层结果加权求和获得增强后的图像。
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
void multiScaleAdaptiveGammaCorrection(Mat& src, Mat& dst){
vector<Mat> pyr;
buildPyramid(src, pyr); // 构建金字塔
for (size_t i = 0; i < pyr.size(); ++i){
double gamma = calculateOptimalGamma(pyr[i]); // 计算最优gamma值
pow(pyr[i], 1 / gamma, pyr[i]);
}
reconstructFromPyr(pyr, dst); // 从金字塔重建图像
}
```
为了进一步提高处理速度,可以在GPU加速的支持下完成上述操作,特别适用于实时应用场景如夜间监控系统或车载摄像头模块中。
#### 方法二:基于直方图均衡化的改进方案
另一种常见的做法是对原始灰度图像执行标准直方图均衡化后再做适当修正。虽然简单快速,但对于某些复杂场景可能不够理想。因此引入了自适应直方图均衡(CLAHE),它允许设置`clipLimit`参数控制对比度增益程度,从而达到更好的视觉效果[^2]。
```cpp
// 自定义函数用于展示如何调用CLAHE接口
void adaptiveHistogramEqualization(const char* imagePath){
Mat image = imread(imagePath);
if(image.empty()){
printf("Could not open or find the image\n");
return ;
}
Mat grayImage;
cvtColor(image, grayImage, COLOR_BGR2GRAY);
Ptr<CLAHE> clahe = createCLAHE();
clahe->setClipLimit(40); // 设置剪切限幅值为40
Mat result;
clahe->apply(grayImage, result);
imshow("Original Image", image);
imshow("Enhanced Image with CLAHE", result);
waitKey(0);
}
```
以上两种方式均能有效地解决低光环境带来的挑战,并且可以根据实际需求灵活选用或组合使用。值得注意的是,当涉及到更复杂的成像条件下(比如雾霾天气),还可以考虑结合暗通道先验模型来进行综合性的画质提升[^3]。
阅读全文