图像处理--opencv2 canny边缘检测
2016-05-13 16:09
555 查看
1.canny检测:
Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:
好的检测- 算法能够尽可能多地标识出图像中的实际边缘。
好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。
最小响应- 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
为了满足这些要求 Canny 使用了变分法,这是一种寻找满足特定功能的函数的方法。最优检测使用四个指数函数项的和表示,但是它非常近似于高斯函数的一阶导数。
2.Canny边缘检测算法步骤
Canny边缘检测算法可以分为以下5个步骤:
应用高斯滤波来平滑图像,目的是去除噪声
找寻图像的强度梯度(intensity gradients)
应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是)
应用双阈值的方法来决定可能的(潜在的)边界
利用滞后技术来跟踪边界
3.opencv2 Canny函数
其中:
InputArray image:输入图像,必须为灰度图;
OutputArray edges:输出图像,保存canny边缘检测的结果;
double threshold1:灰度值的最小阈值;
double threshold2:灰度值的最大阈值。
示例:
输入原始图 canny结果图
Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:
好的检测- 算法能够尽可能多地标识出图像中的实际边缘。
好的定位- 标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。
最小响应- 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。
为了满足这些要求 Canny 使用了变分法,这是一种寻找满足特定功能的函数的方法。最优检测使用四个指数函数项的和表示,但是它非常近似于高斯函数的一阶导数。
2.Canny边缘检测算法步骤
Canny边缘检测算法可以分为以下5个步骤:
应用高斯滤波来平滑图像,目的是去除噪声
找寻图像的强度梯度(intensity gradients)
应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是)
应用双阈值的方法来决定可能的(潜在的)边界
利用滞后技术来跟踪边界
3.opencv2 Canny函数
void Canny( InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false );
其中:
InputArray image:输入图像,必须为灰度图;
OutputArray edges:输出图像,保存canny边缘检测的结果;
double threshold1:灰度值的最小阈值;
double threshold2:灰度值的最大阈值。
示例:
#include <opencv/cv.h> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/legacy/legacy.hpp> #include <iostream> #include <algorithm> #include <string> #include <vector> #include <iostream> #include <string> #include <sstream> using namespace std; using namespace cv; int img_canny(Mat image) { if (!image.data) { cout << "Fail to load image" << endl; return 1; } Mat gray; if (image.channels() == 3) { cvtColor(image, gray, CV_BGR2GRAY); } else { image.copyTo(gray); } Mat result; Canny(gray, result, 50, 250); imshow("cannyResult", result); return 0; } int main(int args, char** argv) { Mat image = imread("/home/odroid/boon/pro_internet/xidao/A002.jpg"); imshow("original", image); img_canny(image); //canny waitKey(); return 0; }
输入原始图 canny结果图
相关文章推荐
- centos 例行性工作转发外部邮箱
- CentOS 6.4下Squid代理服务器的安装与配置
- Android简洁架构设计 The Clean Architecture
- linux 设置IP DNS 网关
- linux 设置IP DNS 网关
- CentOS tar加解压文件
- 初识Linux
- CentOS 安装 JDK
- 拓扑排序(Topological Sorting)
- Hadoop生态系统介绍
- 分享几个国外模板网站(网页素材的下载)
- Ubuntu16.04安装LAMP环境
- tomcat运行模式(bio,aio,apr)
- tomcat运行模式(bio,aio,apr)
- Squid添加账户密码验证
- cobbler 远程安装带图像化的centos服务器 kickstart文件
- centos 下运行程序出现error while loading shared libraries cannot open shared object file错误
- 利用终端命令让jrebel 支持tomcat热部署或者支持jboss服务器的部署
- nginx location 匹配顺序
- hadoop-2.7.1 MapReduce自定义分组的实现