day9 - 对花朵图像进行边缘检测
本期主要介绍常用于进行图像边缘检测的滤波器(算子):Sobel算子、Scharr算子、Laplacian算子;通过实验比较不同的算子的处理效果以及使用场景。
完成本期内容,你可以:
了解图像梯度的原理和应用
掌握使用Sobel算子、Scharr算子、Laplacian算子进行边缘检测
若要运行案例代码,你需要有:
操作系统:Ubuntu 16 以上 或者 Windows10
工具软件:VScode 或者其他源码编辑器
硬件环境:无特殊要求
核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16
点击下载源码
Sobel算子
OpenCV将Sobel算子封装成了cv2.Sobel()
方法。
函数原型: dst = cv2.Sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] )
dst为输出图像。
参数描述如下:
dst
:目标图像src
:原始图像ddepth
:输出图像的深度dx
:x方向上的求导阶数。dy
:y方向上的求导阶数。ksize
:Sobel核的大小。该值为-1时,则会使用Scharr算子进行运算。scale
:计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。delta
:加在目标图像dst上的值,该值是可选的,默认为0。borderType
:边界样式
Scharr算子
OpenCV将Scharr算子封装成了cv2.Scharr()
方法。
函数原型: dst = cv2.Scharr( src, ddepth, dx, dy[, scale[, delta[, borderType]]] )
dst为输出图像。
参数描述如下:
dst
:目标图像src
:原始图像ddepth
:输出图像的深度dx
:x方向上的求导阶数。dy
:y方向上的求导阶数。scale
:计算导数值时所采用的缩放因子,默认情况下该值是1,是没有缩放的。delta
:加在目标图像dst上的值,该值是可选的,默认为0。borderType
:边界样式
Laplacian算子
OpenCV将Laplacian算子封装成了cv2.Laplacian()
方法。
函数原型:dst = cv2.Laplacian( src, ddepth[ , ksize[ , scale[ , delta[ , borderType]]]])
参数描述如下:
ddepth
:输出图像深度。ksize
:核的大小scale
:计算导数值时的缩放因子(可选)。delta
:加到目标图像上的亮度值(可选)。borderType
:边界样式。
具体步骤
1. 创建项目结构
创建项目名为对花朵图像进行边缘检测
,项目根目录下新建code
文件夹储存代码,新建dataset
文件夹储存数据,项目结构如下:
对花朵图像进行边缘检测 # 项目名称
├── code # 储存代码文件
├── dataset # 储存数据文件
注:如项目结构已存在,无需再创建。
2. 使用不同的算子进行边缘检测
- 在
code
文件夹下创建edge.py
文件; - 导入所需的库,OpenCV;
- 读取
dataset
文件夹下的flower.png
图片,并进行展示,标题为flower ; - 分别使用Sobel算子、Scharr算子、Laplacian算子进行图像处理,并展示结果;
步骤一:创建文件并读取图像
代码实现
# 导入OpenCV
import cv2
# 读取图片
o = cv2.imread('../dataset/flower.png')
cv2.imshow('flower',o)
原图像
步骤二:使用Sobel算子进行边缘检测
代码实现
# 使用Sobel算子进行边缘检测
# 计算图像x方向的边缘,输出图像深度为64F
Sobelx = cv2.Sobel(o,cv2.CV_64F,1,0)
Sobelx = cv2.convertScaleAbs(Sobelx)
# 计算图像y方向的边缘,输出图像深度为64F
Sobely = cv2.Sobel(o,cv2.CV_64F,0,1)
Sobely = cv2.convertScaleAbs(Sobely)
# 将x和y方向的梯度图加权相加
Sobelxy = cv2.addWeighted(Sobelx,0.5,Sobely,0.5,0)
cv2.imshow('Sobel',Sobelxy)
使用Sobel算子进行边缘检测后的效果
步骤三:使用Scharrx算子进行边缘检测
代码实现
# 使用Scharrx算子进行边缘检测
# 计算图像x方向的边缘,输出图像深度为64F
Scharrx = cv2.Scharr(o,cv2.CV_64F,1,0)
Scharrx = cv2.convertScaleAbs(Scharrx)
# 计算图像y方向的边缘,输出图像深度为64F
Scharry = cv2.Scharr(o,cv2.CV_64F,0,1)
Scharry = cv2.convertScaleAbs(Scharry)
# 将x和y方向的梯度图加权相加
Scharrxy = cv2.addWeighted(Scharrx,0.5,Scharry,0.5,0)
cv2.imshow('Scharr',Scharrxy)
使用Scharrx算子进行边缘检测后的效果
步骤四:使用Laplacian算子进行边缘检测
代码实现
# 使用Laplacian算子进行边缘检测
# 计算图像图像边缘信息,滤波核的大小为3,输出图像深度为64F
Laplacian = cv2.Laplacian(o,cv2.CV_64F,ksize = 3)
Laplacian = cv2.convertScaleAbs(Laplacian)
cv2.imshow("Laplacian",Laplacian)
使用Laplacian算子进行边缘检测后的效果
步骤五:关闭窗口
代码实现
cv2.waitKey()
cv2.destroyAllWindows()
3. 结果比较
通过比较三种算子进行边缘检测以后的效果,会发现:三种算子均可以满足图像边缘检测的需求,scharr算子较sobel算子提取的细节边缘更多,Laplacian算子提取边缘后的图像亮度更高。
点击下载源码
day9 - 对花朵图像进行边缘检测相关推荐
- 利用OpenCV的库函数Sobel和Scharr作图像的边缘检测
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像边缘检测的概念我就不多说了,可以参考上一篇博 ...
- 【Matlab 图像】边缘检测算法及效果演示
[Matlab 图像]边缘检测算法及效果演示 边缘检测 检测图像中的边缘 Matlab 代码 代码效果如下 边缘算法:robert 边缘算法:sobel prewitt 边缘算法:laplacian ...
- 二值形态学操作、图像的边缘检测、图像编码
实验五 二值形态学操作 一.实验目的 了解二值形态学的基本运算 掌握基本形态学运算的Matlab实现 了解形态操作的应用 二.原理 收缩和膨胀是数学形态学最基本的变换,数学形态学的 ...
- OpenCV笔记(十五)——使用Laplace算子进行图像的边缘检测
在笔记十四中,我们使用了Sobel算子对图像进行边缘检测,理论依据是像素变化最快的地方最有可能是边缘处,所以使用sobel算子对图像做微分,得到的结果图像当中灰度较大的区域,即为边缘处. 在这里,我们 ...
- tensorflow2.4使用GooleNet实现识别植物花朵图像项目
tensorflow2.4使用GooleNet实现识别植物花朵图像项目 1. 数据集下载 链接:https://pan.baidu.com/s/1zs9U76OmGAIwbYr91KQxgg 提取码: ...
- 如何使用OpenCV进行图像的边缘检测和边缘增强?
OpenCV提供了几种常见的边缘检测算法,包括Sobel.Scharr.Laplacian和Canny等.这些算法可以帮助我们找到图像中的边缘并增强它们,以提取有用的特征或分割图像中的对象. 如何使用 ...
- IOS OpenGL ES GPUImage 图像Sobel边缘检测,类似漫画反色 GPUImageSobelEdgeDetectionFilter
目录 一.简介 二.效果演示 三.源码下载 四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 Ope ...
- 图像的边缘检测-三种方法
图像的边缘检测: 比较拉普拉斯算子,LOG算子,Canny算子三种边缘检测算法. 编程思路: 图像边缘就是图像灰度值突变的地方,也就是图像在该部分的像素值变化速度非常之快,就比如在坐标轴上一条曲线有刚 ...
- 【有三说图像】边缘检测(上)
02 这是有三说图像第2期,边缘检测上篇 言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 作者 | 言有三(微信号Longlongtogo) 编辑 | 言有三 这是<有三说图 ...
最新文章
- C# WinForm 技巧十: 开发工具
- 使用ansible来调度cron作业
- response.addCookie(cookie)添加cookie失败.
- 软文:第三方支付技术的场景应用,支付技术延伸与国际化
- 【Android UI设计与开发】7.底部菜单栏(四)PopupWindow 实现显示仿腾讯新闻底部弹出菜单...
- SAP ABAP Netweaver和Hybris Commerce的部署策略
- 在ASP.NET Core微服务架构下使用数据库切分和扩展
- BFPTR算法详解+实现+复杂度证明
- 每日优鲜小程序基础组件介绍
- fullcalendar 上下月翻动事件_用期权做事件套利的黄金法则
- python 爬虫框架_小白学 Python 爬虫(28):自动化测试框架 Selenium (下)
- linux lamp实验报告,新手学Linux--构建lamp
- python读取大文件太慢_强悍的Python读取大文件的解决方案
- 2021年安全员-A证报名考试及安全员-A证考试报名
- VUE中常用的UI库
- 无人驾驶虚拟仿真(四)--通过ROS系统控制小车行走
- QT开发应用程序(17)-- 读写XLS文件
- java js hexmd5_JAVA与JS在MD5上问题
- Debian编译内核教程
- 小说程序源码 自动采集