学习opencv之canny算法
来源:互联网 发布:玉溪诺德软件 编辑:程序博客网 时间:2024/05/22 09:07
canny对边缘检测质量进行分析时,有3个原则:
1、信噪比准则
2、定位精度准则
3、单边缘响应准则
canny边缘检测的基本思想是:首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。
具体步骤:
1、用高斯滤波器平滑图像
2、用一阶偏导的有限差分来计算梯度的幅值和方向
3、对梯度幅值进行非极大值抑制
4、用双阈值算法检测和连接边缘
通俗的来说:就是在进行边缘检测时,还是要用到滤波减小噪声,先通过在水平和垂直方向的一阶偏导,求得梯度的幅值和方向,这样每个点都可能有4中方向情况(0,45,90,135度),在局部范围内,保留在同一方向上,梯度最大的点,非最大就置零,最后使用2个阈值T1和T2(T1<T2),T2用来找到每条线段,T1用来在这些线段的两个方向上延伸寻找边缘的断裂处,并连接这些边缘。
注:上下限阈值之比最好在2:1到3:1之间。
实现代码如下:
// 1.2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include"opencv243.h"using namespace cv;using namespace std;Mat image, cedge;Mat gray, edge;int edgeThresh = 1;void onTrackbar(int, void*){GaussianBlur(gray,edge,Size(3,3),0);//高斯滤波 // Canny 边缘检测Canny(gray,edge, edgeThresh, edgeThresh*2, 3); //全部设为0cedge = Scalar::all(0); //拷贝边缘的象素点image.copyTo(cedge, edge); imshow("edge", edge); }int _tmain(int argc, _TCHAR* argv[]){image=imread("C:\\Users\\sony\\Desktop\\Lena.jpg");if(image.empty()){cout<<"miss the image file"<<endl;return -1;}cedge.create(image.size(),image.type());//建立新的数组cvtColor(image,gray,CV_RGB2GRAY); //转化为灰度图像cvNamedWindow("edge",CV_WINDOW_AUTOSIZE);createTrackbar("Canny Threshold", "edge", &edgeThresh, 100, onTrackbar);waitKey(0);return 0;}
- 学习opencv之canny算法
- OpenCV学习之Canny算法边缘检测(可调阈值)
- opencv学习之Canny算子
- 【学习笔记】opencv之canny算子
- OpenCV学习之Canny边缘检测
- openCV中canny算法
- OpenCV学习Canny
- openCV学习笔记(2):Canny边缘检测算法应用
- opencv轮廓检测之椭圆检测-----算法篇(4)--Canny
- canny opencv边缘检测算法
- opencv中canny算法理解
- opencv学习之三:高斯模糊以及canny检测
- opencv学习之读摄像头并用canny边缘检测输出
- canny 算法学习
- OpenCV学习笔记-Canny算子
- OPENCV中Canny学习笔记
- opencv之canny源码解析
- opencv之canny边缘检测
- android 学习
- C# 获得IPV4地址
- how to use linux nfs in android
- htc one s刷机疑难症解决方案
- 通过apk签名使应用程序有系统权限
- 学习opencv之canny算法
- PhoneGap开发Android
- Android 4.0.4系统下实现apk的静默安装和启动
- 阿里的电话面试是神马感觉
- 解决HASP NoApiDylib问题
- 查询GetLastError返回值含义的方法
- HDU1256(模拟)
- WPF-17行为(以控件在界面拖动为例)
- EmailService