-
大小: 5KB文件类型: .cpp金币: 1下载: 0 次发布日期: 2021-06-14
- 语言: C/C++
- 标签: opencv4.3.0 去雾
资源简介
基于暗通道先验的去雾算法,去雾算法目前也有着众多其他的方式,不过我所接触的,很多都是以这个为基础,因此,先弄会这个为研究其他的去雾算法能奠定坚实的基础。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
//求暗通道
Mat darkChannel(Mat src)
{
Mat rgbmin = Mat::zeros(src.rows src.cols CV_8UC1);
Mat dark = Mat::zeros(src.rows src.cols CV_8UC1);
Vec3b intensity;
for (int m = 0; m {
for (int n = 0; n {
intensity = src.at(m n);
rgbmin.at(m n) = min(min(intensity.val[0] intensity.val[1]) intensity.val[2]);
}
}
//模板尺寸
int scale = 7;
//cout << “Please enter the mask scale: “ << endl;
//cin >> scale;
//边界扩充
int radius = (scale - 1) / 2;
Mat border;
//由于要求最小值,所以扩充的边界可以用复制边界填充
copyMakeBorder(rgbmin border radius radius radius radius BORDER_REPLICATE);
//最小值滤波
for (int i = 0; i < src.cols; i++)
{
for (int j = 0; j < src.rows; j++)
{
//选取兴趣区域
Mat roi;
roi = border(Rect(i j scale scale));
//求兴趣区域的最小值
double minVal = 0; double maxVal = 0;
Point minLoc = 0; Point maxLoc = 0;
minMaxLoc(roi &minVal &maxVal &minLoc &maxLoc noArray());
dark.at(Point(i j)) = (uchar)minVal;
}
}
return dark;
}
uchar light(vector inputIamgeMax)
{
uchar maxA = 0;
for (int i = 0; i < inputIamgeMax.size() - 1; i++)
{
if (maxA < inputIamgeMax[i + 1])
{
maxA = inputIamgeMax[i + 1];
}
}
return maxA;
}
//Mat dark(Mat image)
//{
// Mat minColor(image.rows image.cols CV_8UC1 Scalar(180 120 50));
// Mat darkChannel(image.rows image.cols CV_8UC1 Scalar(180 120 50));
//
// //求每个像素BGR三通道最小值
// for (int i = 0; i < image.cols; i++)
// {
// for (int j = 0; j < image.rows; j++)
// {
// uchar blue green red;
// blue = image.at(Point(i j))[0];
// green = image.at(Point(i j))[1];
// red = image.at(Point(i j))[2];
// minColor.at(Point(i j)) = minBGR(blue green red);
// }
// }
//
// //模板尺寸
// int scale;
// cout << “Please enter the mask scale: “ << endl;
// cin >> scale;
//
// //边界扩充
// int radius = (scale - 1) / 2;
// Mat border;
// //由于要求最小值,所以扩充的边界可以用复制边界填充
// copyMakeBorder(minColor border radius radius radius radius BORDER_REPLICATE);
//
// //最小值滤波
// for (int i = 0; i < image.cols; i++)
// {
// for (int j = 0; j < image.rows; j++)
// {
// //选取兴趣区域
// Mat roi;
//
- 上一篇:C++继承,剪刀石头布
- 下一篇:c语言程序设计_销售管理系统
评论
共有 条评论