因为近期完成水下识别任务,过程中突发奇想,一些心得分享于此。
有利用去雾算法,霍夫变换,颜色识别等方法;不多说废话,以图为证。(主要为去雾算法,原理不深究,先会整理使用再说)1.项目整体代码整体预览
主函数
2.所用方法
//----------【darkChannel(Mat src)函数】--------------
// //描述:求暗通道
//----------------------------------------------------------
//----【light(vector<uchar> inputIamgeMax)函数】----
// //描述:找最大值
//-----------------------------------------------------------
// //描述:找最大值
//-----------------------------------------------------------
//---------【darkdehazed(Mat src1)函数】---------------
// //描述:去雾
//----------------------------------------------------------
// //描述:去雾
//----------------------------------------------------------
//------------【findcolor(Mat src2)函数】----------------
// //描述:寻找指定颜色
//----------------------------------------------------------
// //描述:寻找指定颜色
//----------------------------------------------------------
//---------【houghcircles(Mat src)函数】----------------
// //描述:霍夫变换;圆(直线,矩形)
//-----------------===------------------------------------
// //描述:霍夫变换;圆(直线,矩形)
//-----------------===------------------------------------
3.核心代码(去雾算法)
//模块1
for (long i = 0; i < ((src1.rows*src1.cols) / 1000); i++)
{
double minVal = 0; double maxVal = 0;
Point minLoc = 0; Point maxLoc = 0;
minMaxLoc(temp, &minVal, &maxVal, &minLoc, &maxLoc, noArray());
darkMaxPoint.push_back(maxLoc);
inputMax.push_back(image.at<uchar>(maxLoc));
circle(temp, maxLoc,5, Scalar(0), 1, 8, 0);
temp.at<uchar>(maxLoc) = temp.at<uchar>(minLoc);
}
//模块2
for (int m = 0; m<image.rows; m++)
{
for (int n = 0; n<image.cols; n++)
{
intensity = src1.at<uchar>(m, n);
T.at<Vec3b>(m, n)[0] = (1 - w * intensity.val[0] / A) * 255;
T.at<Vec3b>(m, n)[1] = (1 - w * intensity.val[0] / A) * 255;
T.at<Vec3b>(m, n)[2] = (1 - w * intensity.val[0] / A) * 255;
}
}
//模块3
for (int i = 0; i < image.cols; i++)
{
for (int j = 0; j < image.rows; j++)
{
T1 = T.at<uchar>(Point(i, j));
intsrc = image.at<Vec3b>(Point(i, j));
double tmax = (T1.val[0] / 255) < t0 ? t0 : (T1.val[0] / 255);
for (int k = 0; k < 3; k++)
{
J.at<Vec3b>(Point(i, j))[k] = abs((intsrc.val[k] - A) / tmax + A) > 255 ? 255 : abs((intsrc.val[k] - A) / tmax + A);
}
}
}
4.原图与效果图
原图
处理过程
效果图
处理到这里,效果图与原图的明显区别都一目了然
将模糊的图片效果增强到如此,后面想进行识别,寻找,判定都轻而易举了吧。
我所做的当然是寻找水下识别哪些小黑泡
如果需要源代码的可以去我的资源里下载---去雾代码。
喜欢的,有帮助的可以点个赞支持一下噢,谢谢,愿代码之路不在迷茫。