OpenCV探索之路(六):边缘检测(canny、sobel、laplacian)
边缘检测的一般步骤:
- 滤波——消除噪声
- 增强——使边界轮廓更加明显
- 检测——选出边缘点
Canny算法
Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法,所以我们第一个就介绍他。
opencv中提供了Canny函数。
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
//边缘检测
int main()
{
Mat img = imread("lol3.jpg");
imshow("原始图", img);
Mat DstPic, edge, grayImage;
//创建与src同类型和同大小的矩阵
DstPic.create(img.size(), img.type());
//将原始图转化为灰度图
cvtColor(img, grayImage, COLOR_BGR2GRAY);
//先使用3*3内核来降噪
blur(grayImage, edge, Size(3, 3));
//运行canny算子
Canny(edge, edge, 3, 9, 3);
imshow("边缘提取效果", edge);
waitKey(0);
}
看了canny算法提取的轮廓图,感觉真是厉害,居然把那么细致的额轮廓都提取出来了!
Sobel算法
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
//边缘检测
int main()
{
Mat img = imread("lol3.jpg");
imshow("原始图", img);
Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y, dst;
//求x方向梯度
Sobel(img, grad_x, CV_16S, 1, 0, 3, 1, 1,BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
imshow("x方向soble", abs_grad_x);
//求y方向梯度
Sobel(img, grad_y,CV_16S,0, 1,3, 1, 1, BORDER_DEFAULT);
convertScaleAbs(grad_y,abs_grad_y);
imshow("y向soble", abs_grad_y);
//合并梯度
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
imshow("整体方向soble", dst);
waitKey(0);
}
通过下图可以看出,sobel的轮廓提取明显有没cnany的那么细致,只是把一些明显轮廓的边缘提取出来了,看起来会更舒服一点。
灰度图的效果
Laplacian算法
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
//边缘检测
int main()
{
Mat img = imread("lol3.jpg");
imshow("原始图", img);
Mat gray, dst,abs_dst;
//高斯滤波消除噪声
GaussianBlur(img, img, Size(3, 3), 0, 0, BORDER_DEFAULT);
//转换为灰度图
cvtColor(img, gray, COLOR_RGB2GRAY);
//使用Laplace函数
//第三个参数:目标图像深度;第四个参数:滤波器孔径尺寸;第五个参数:比例因子;第六个参数:表示结果存入目标图
Laplacian(gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT);
//计算绝对值,并将结果转为8位
convertScaleAbs(dst, abs_dst);
imshow("laplace效果图", abs_dst);
waitKey(0);
}
但是感觉效果一般,图像变得模糊了。
OpenCV探索之路(六):边缘检测(canny、sobel、laplacian)的更多相关文章
- [OpenCV] 2、边缘检测 canny
>_<" 边缘检测代码:
- opencv学习之边缘检测
边缘检测 是图像处理 过程中经常会涉及到的一个环节.而在计算机视觉 和 机器学习领域,边缘检测 用于 特征提取 和 特征检测 效果也是特别明显.而 openCV 中进行边缘检测的 算法 真是五花八门, ...
- OpenCV探索之路(七):霍夫变换
我们如何在图像中快速识别出其中的圆和直线?一个非常有效的方法就是霍夫变换,它是图像中识别各种几何形状的基本算法之一. 霍夫线变换 霍夫线变换是一种在图像中寻找直线的方法.OpenCV中支持三种霍夫线变 ...
- OpenCV探索之路(二十四)图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...
- OpenCV——边缘检测(sobel算子、Laplacian算子、scharr滤波器)
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- 【OpenCV】边缘检测:Sobel、拉普拉斯算子
推荐博文,博客.写得很好,给个赞. Reference Link : http://blog.csdn.net/xiaowei_cqu/article/details/7829481 一阶导数法:梯度 ...
- openCV(四)---Canny边缘检测
图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘. 直接上代码,函数简介都在代码注释中 //canny边缘检测 -(void) ...
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- OpenCV学习笔记(11)——Canny边缘检测
了解Canny边缘检测的概念 1.原理 Canny边缘检测是一种非常流行的边缘检测算法,是 John F.Canny在1986年提出的.它是一个有很多步构成的算法 1)噪声去除 使用5*5的高斯滤波器 ...
随机推荐
- XJOI1424解压字符串
解压字符串 给你一个字符串S,S是已经被加密过的字符串.现在要求你把字符串S还原.字符串S可能会出现这样的格式:k(q),它表示字符串q重复了k次,其中q是0个或多个字符,而k是一个数字,范围是0至9 ...
- html中引入调用另一个html的方法
html中引入调用另一个html的方法,尝试了好几种,都列出来: 其中第一种是最好的,其他的方法,可以尝试看看,是不是适合你当前项目 一.div+$("#page1").load( ...
- 性能测试培训:批量执行Jmeter脚本之ant调用
性能测试培训:批量执行Jmeter脚本之ant调用 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的load ...
- 手机自动化测试:Appium源码之api(1)
手机自动化测试:Appium源码之api(1) AppiumDriver getAppStrings() 默认系统语言对应的Strings.xml文件内的数据. driver.getAppStri ...
- 老李分享:jvm结构简介 1
老李分享:jvm结构简介 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...
- selenium自动化过程中如何操作Flash动画
最近在看python的爬虫框架(scrapy),一个词概括就是:"酸爽"!等把selenium自动化版块讲完后,打算写一写关于scrapy相关的知识,打算从源码角度解析下scrap ...
- word-wrap: break-word;与word-break: break-all;文本自动换行
word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行它们的区别就在于:1,word-break:break-all 例如div宽200 ...
- Redis基础学习(三)—Key操作
一.key的相关操作 1.删除 del key1 key2 ... Keyn 作用: 删除1个或多个键. 返回值: 不存在的key忽略掉,返回真正删除的key的数量. 2.重命名 rename k ...
- 线上分享会.net框架“ABP”分享会总结
前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...
- Apache Beam 剖析
1.概述 在大数据的浪潮之下,技术的更新迭代十分频繁.受技术开源的影响,大数据开发者提供了十分丰富的工具.但也因为如此,增加了开发者选择合适工具的难度.在大数据处理一些问题的时候,往往使用的技术是多样 ...