opencv 彩色图片找暗通道 c++代码
时间: 2023-07-24 09:34:19 浏览: 99
opencv 之 颜色通道提取
以下是OpenCV C++代码示例,用于计算彩色图像的暗通道:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
// 计算单通道图像的暗通道
Mat getDarkChannel(Mat src, int patchSize)
{
Mat darkChannel = Mat::zeros(src.rows, src.cols, CV_8UC1);
int halfPatchSize = patchSize / 2;
for (int i = halfPatchSize; i < src.rows - halfPatchSize; i++)
{
for (int j = halfPatchSize; j < src.cols - halfPatchSize; j++)
{
// 获取当前像素点的局部区域
Mat patch = src(Rect(Point(j - halfPatchSize, i - halfPatchSize), Size(patchSize, patchSize)));
// 计算局部区域内的最小值
double minVal;
minMaxLoc(patch, &minVal, NULL);
// 将最小值作为暗通道像素值
darkChannel.at<uchar>(i, j) = static_cast<uchar>(minVal);
}
}
return darkChannel;
}
int main()
{
// 读取彩色图像
Mat src = imread("input.jpg");
// 转换为浮点型图像
Mat srcFloat;
src.convertTo(srcFloat, CV_32FC3, 1.0 / 255.0);
// 获取暗通道
Mat darkChannel = getDarkChannel(srcFloat, 15);
// 显示结果
namedWindow("Dark Channel", WINDOW_AUTOSIZE);
imshow("Dark Channel", darkChannel);
waitKey(0);
return 0;
}
```
在上面的代码中,我们首先读取彩色图像,然后将其转换为浮点型图像,接着计算暗通道,并显示结果。其中,getDarkChannel() 函数用于计算单通道图像的暗通道,采用的是简单的滑动窗口方法。最后,我们可以将结果显示出来,以便观察。
阅读全文