OpenCV半小时掌握基本操作之边缘检测
目录
- 概述
- Scharr 算子
- Laplacian 算子
- Sobel vs Scharr vs Laplacian
- Canny 边缘检测
- 高斯滤波器
- 梯度和方向
- 非极大值抑制
- 双阈值检测
- 例子
【OpenCV半小时掌握基本操作之边缘检测】
概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 12 课)
Scharr 算子 Scharr 算子和 Sobel 算子基本一样. 只是卷积核系数不同. Scharr 算子对边界更加敏感, 也更容易误判.
卷积核参数:
文章图片
例子:
# Scharr 算子scharr_x = cv2.Scharr(img, cv2.CV_64F, 1, 0)scharr_y = cv2.Scharr(img, cv2.CV_64F, 0, 1)# 取绝对值scharr_x = cv2.convertScaleAbs(scharr_x)scharr_y = cv2.convertScaleAbs(scharr_y)# 融合scharr_xy = cv2.addWeighted(scharr_x, 0.5, scharr_y, 0.5, 0)# 展示图片cv2.imshow("scharr_xy", scharr_xy)cv2.waitKey(0)cv2.destroyAllWindows()
输出结果:
文章图片
Laplacian 算子 拉普拉斯算子 (Laplacian) 是图像二阶空间导数的二维向同性测度. 拉普拉斯算子可以突出图像中强度发生快速变化的区域, 因此常用在边缘检测任务当中.
文章图片
在进行 Laplacian 操作之前通常需要先用高斯平滑滤波器 (Gaussian Blur) 降低 Laplacian 算子对于噪声的敏感性.
卷积核参数:
文章图片
例子:
# 读取图片, 并准换成灰度图img = cv2.imread("Mona_Lisa.jpg", cv2.IMREAD_GRAYSCALE)# 高斯滤波器 (3 X 3)img = cv2.GaussianBlur(img, (3, 3), sigmaX=0.1)# Laplacian 算子laplacian = cv2.Laplacian(img, cv2.CV_64F)# 取绝对值laplacian = cv2.convertScaleAbs(laplacian)# 展示图片cv2.imshow("laplacian", laplacian)cv2.waitKey(0)cv2.destroyAllWindows()
输出结果:
文章图片
注: Sigma 值越小, 模板的中心系数就越大, 周围的系数较小, 平滑的效果就不是很明显.
Sobel vs Scharr vs Laplacian
文章图片
Canny 边缘检测 Canny 边缘检测是非常流行的一种边缘检测算法, 由 John Canny 在 1986 年提出.
步骤:
- 使用高斯滤波器, 平滑图像, 消除噪声
- 计算图像中每个像素点的梯度强度和方向
- 使用没极大值抑制 (Non-Maximum Suppression) 消除边缘检测带来的杂散响应
- 使用双阈值检测 (Double Threshold) 来确定真实和潜在的边缘
- 通过抑制孤立的弱边缘最终完成边缘检测
高斯滤波器
文章图片
梯度和方向
文章图片
非极大值抑制
文章图片
文章图片
双阈值检测
文章图片
例子
# 读取图片, 并转换成灰度图img = cv2.imread("Mona_Lisa.jpg", cv2.IMREAD_GRAYSCALE)# Canny边缘检测out1 = cv2.Canny(img, 50, 150)out2 = cv2.Canny(img, 100, 150)# 合并canny = np.hstack((out1, out2))# 展示图片cv2.imshow("canny", canny)cv2.waitKey(0)cv2.destroyAllWindows()
输出结果:
文章图片
到此这篇关于OpenCV半小时掌握基本操作之边缘检测的文章就介绍到这了,更多相关OpenCV边缘检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 不废话,代码实践带你掌握|不废话,代码实践带你掌握 强缓存、协商缓存!
- 新媒体时代,你需要掌握的必备技能
- 【挑战日更】Day6.《终身学习.10个你必须掌握的未来生存法则》摘录之三
- 卓德外汇苗苗/职业投机客“持续掌握优势”的秘密
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- 好书共读《副业赚钱》第3天(做副业,需要掌握的几种能力)
- iOS开发需要掌握的原理
- OpenCV|OpenCV for Unity 通过WebCamTextureToMatHelper帮助类来获取摄像头的画面