opencv中Canny源码解析

这篇博客深入解析了OpenCV库中Canny算法的源码,通过一张示意图辅助理解,虽然图片方向出现问题,作者期待得到解决办法。同时,提供了详细代码链接来源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客是有关opencv中canny源码解析,下图是根据代码画的示意图(图片自动转向了,不知如何调整,菜鸟一枚没办法,如有解决方法,望告知奋斗),便于理解。另外,后面附加的代码是源于 https://blog.csdn.net/u010429424/article/details/51866361


void cv::Canny(InputArray _src, OutputArray _dst,double low_thresh, double high_thresh, int aperture_size, bool L2gradient)
{
	Mat src = _src.getMat();           //输入图像 
	CV_Assert(src.depth() == CV_8U); // 8位无符号  

	_dst.create(src.size(), CV_8U);    //根据src的大小构造目标矩阵dst  
	Mat dst = _dst.getMat();           //输出图像,为单通道黑白图  


	// low_thresh 表示低阈值, high_thresh表示高阈值  
	// aperture_size 表示算子大小,默认为3  
	// L2gradient计算梯度幅值的标识,默认为false  

	// 如果L2gradient为false 并且 apeture_size的值为-1(-1的二进制标识为:1111 1111)  
	// L2gradient为false 则计算sobel导数时,用G = |Gx|+|Gy|  
	// L2gradient为true  则计算sobel导数时,用G = Math.sqrt((Gx)^2 + (Gy)^2) 根号下 开平方  

	if (!L2gradient && (aperture_size & CV_CANNY_L2_GRADIENT) == CV_CANNY_L2_GRADIENT)
	{
		// CV_CANNY_L2_GRADIENT 宏定义其值为: Value = (1<<31) 1左移31位  即2147483648  
		//backward compatibility  

		// ~标识按位取反  
		aperture_size &= ~CV_CANNY_L2_GRADIENT;//相当于取绝对值  
		L2gradient = true;
	}


	// 判别条件1:aperture_size是奇数  
	// 判别条件2: aperture_size的范围应当是[3,7], 默认值3   
	if ((aperture_size & 1) == 0 || (aperture_size != -1 && (aperture_size < 3 || aperture_size > 7)))
		CV_Error(CV_StsBadFlag, "");  // 报错  

	if (low_thresh > high_thresh)           // 如果低阈值 > 高阈值  
		std::swap(low_thresh, high_thresh); // 则交换低阈值和高阈值  

#ifdef HAVE_TEGRA_OPTIMIZATION  
	if (tegra::canny(src, dst, low_thresh, high_thresh, aperture_size, L2gradient))
		return;
#endif  

#ifdef USE_IPP_CANNY  
	if (aperture_size == 3 && !L2g
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值