水下识别---去雾算法--寻找霍夫圆(opencv c++)

因为近期完成水下识别任务,过程中突发奇想,一些心得分享于此。

有利用去雾算法,霍夫变换,颜色识别等方法;
不多说废话,以图为证。

(主要为去雾算法,原理不深究,先会整理使用再说)
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.原图与效果图

原图

处理过程


效果图
处理到这里,效果图与原图的明显区别都一目了然
将模糊的图片效果增强到如此,后面想进行识别,寻找,判定都轻而易举了吧。

我所做的当然是寻找水下识别哪些小黑泡

微笑微笑微笑微笑微笑微笑微笑微笑微笑微笑

如果需要源代码的可以去我的资源里下载---去雾代码。
喜欢的,有帮助的可以点个赞支持一下噢,谢谢,愿代码之路不在迷茫。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值