OpenCV——canny算子

1. opencv——Canny算子

 

Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:

最好的检测: 算法能够尽可能多地标识出图像中的实际边缘。

最好的定位: 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。

最小的响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
第一步:用高斯平滑滤波器卷积降噪。第二步:计算梯度幅值和方向。第三步:非极大值抑制。第四步:滞后阈值

     最简单的Canny用法:

 

#include<opencv2\opencv.hpp>

using namespace cv;
int main()
{
	Mat src, src1;
	src = imread("h:\\1.jpg");
	imshow("原始图", src);
	Canny(src, src1, 150, 100, 3);
	//1.输入图 2.输出图 3.高域值 4.低阈值 5.孔径大小,默认值为3

	imshow("效果图", src1);
	waitKey(0);
	return 0;
}

运行结果:

 

高阶Canny用法:

转换称灰度图,降噪,用Canny,将边缘作掩码,拷贝原图到效果图,得到彩色边缘图。

 

#include<opencv2\opencv.hpp>


using namespace cv;
int main(void)
{
	Mat src, dst, edge, gray;
	src = imread("h:\\1.jpg");
	imshow("原始图", src);
	//创建与src同类型,同大小的矩阵dst
	dst.create(src.size(), src.type());
	//转换灰度图
	cvtColor(src, gray, COLOR_BGR2GRAY);
	//用3*3内核降噪
	blur(gray, edge, Size(3, 3));
	//运行Canny算子
	Canny(edge, edge, 3, 9, 3);
	//将dst图片所有像素设置为0,变成黑色
	dst = Scalar::all(0);
	//边缘图做掩码,将原图拷贝到效果图中
	src.copyTo(dst,edge);
	imshow("效果图", dst);
	waitKey(0);
	return 0;
}	Mat src, dst, edge, gray;
	src = imread("h:\\1.jpg");
	imshow("原始图", src);
	//创建与src同类型,同大小的矩阵dst
	dst.create(src.size(), src.type());
	//转换灰度图
	cvtColor(src, gray, COLOR_BGR2GRAY);
	//用3*3内核降噪
	blur(gray, edge, Size(3, 3));
	//运行Canny算子
	Canny(edge, edge, 3, 9, 3);
	//将dst图片所有像素设置为0,变成黑色
	dst = Scalar::all(0);
	//边缘图做掩码,将原图拷贝到效果图中
	src.copyTo(dst,edge);
	imshow("效果图", dst);
	waitKey(0);
	return 0;
}

 

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值