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 年提出.

步骤:

  1. 使用高斯滤波器, 平滑图像, 消除噪声
  2. 计算图像中每个像素点的梯度强度和方向
  3. 使用没极大值抑制 (Non-Maximum Suppression) 消除边缘检测带来的杂散响应
  4. 使用双阈值检测 (Double Threshold) 来确定真实和潜在的边缘
  5. 通过抑制孤立的弱边缘最终完成边缘检测

高斯滤波器

梯度和方向

非极大值抑制

双阈值检测

例子

# 读取图片, 并转换成灰度图
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边缘检测内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python实现canny边缘检测

    canny边缘检测原理 canny边缘检测共有5部分组成,下边我会分别来介绍. 1 高斯模糊(略) 2 计算梯度幅值和方向. 可选用的模板:soble算子.Prewitt算子.Roberts模板等等; 一般采用soble算子,OpenCV也是如此,利用soble水平和垂直算子与输入图像卷积计算dx.dy: 进一步可以得到图像梯度的幅值: 为了简化计算,幅值也可以作如下近似: 角度为: 如下图表示了中心点的梯度向量.方位角以及边缘方向(任一点的边缘与梯度向量正交) : θ = θm = arcta

  • Python OpenCV实现边缘检测

    本文实例为大家分享了Python OpenCV实现边缘检测的具体代码,供大家参考,具体内容如下 1. Sobel 算子检测 Sobel 算子是高斯平滑和微分运算的组合,抗噪能力很强,用途也很多,尤其是效率要求高但对细纹理不是很在意的时候. 对于不连续的函数,有: 假设要处理的图像为I,在两个方向求导. 水平变化:用奇数大小的模板对图像I卷积,结果为Gx.例如,当模板大小为3时,Gx为: 垂直变化:用奇数大小的模板对图像I卷积,结果为Gy.例如,当模板大小为3时,Gy为: 在图像的每个点,结合以上

  • Python实现Opencv cv2.Canny()边缘检测

    目录 1. 效果图 2. 源码 补充:OpenCV-Python 中 Canny() 参数 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测: Canny边缘检测是一种流行的边缘检测算法.它是由约翰F开发的,是一个多阶段的算法: Canny边缘检测大致包含4个步骤: 降噪(使用高斯滤波去除高频噪声): 计算边缘梯度和方向(SobelX.SobleY核在水平方向和垂直方向对平滑后的图像进行滤波,找到每个像素的边缘梯度和方向): 非最大抑制(在得到梯度大小和方向后,对

  • 如何利用Python 进行边缘检测

    为何检测边缘? 我们首先应该了解的问题是:"为什么要费尽心思去做边缘检测?"除了它的效果很酷外,为什么边缘检测还是一种实用的技术?为了更好地解答这个问题,请仔细思考并对比下面的风车图片和它的"仅含边缘的图": 可以看到,左边的原始图像有着各种各样的色彩.阴影,而右边的"仅含边缘的图"是黑白的.如果有人问,哪一张图片需要更多的存储空间,你肯定会告诉他原始图像会占用更多空间.这就是边缘检测的意义:通过对图片进行边缘检测,丢弃大多数的细节,从而得到&q

  • OpenCV中Canny边缘检测的实现

    目录 1. Canny 边缘检测理论 1.1.高斯滤波 1.2.Sobel算子计算梯度和方向 1.3.非极大值抑制(定位准确的边缘同时可缩小边缘线宽) 1.4.双阈值检测 2. OpenCV 之 Canny 边缘检测 边缘检测一般是识别目标图像中亮度变化明显的像素点. 因为显著变化的像素点通常反映了图像变化比较重要的地方. 1. Canny 边缘检测理论 Canny 是一种常用的边缘检测算法. 其是在 1986 年 John F.Canny 提出的. Canny 是一种 multi-stage

  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    这篇博客将介绍如何使用OpenCV和深度学习应用全面嵌套的边缘检测.并将对图像和视频流应用全面嵌套边缘检测,然后将结果与OpenCV的标准Canny边缘检测器进行比较. 1. 效果图 愤怒的小鸟--原始图 VS Canny边缘检测图 VS HED边缘检测图 花朵--原始图 VS Canny边缘检测图 VS HED边缘检测图 视频效果图GIF 如下 2. 全面嵌套边缘检测与Canny边缘检测 2.1 Hed与Canny边缘检测对比 Holistically-Nested Edge Detectio

  • OpenCV实现灰度、高斯模糊、边缘检测的示例

    一.彩色图像转灰度 Opencv提供了一个方法,可以使彩色图像变为灰度图像. 函数名:cvtColor(src,dest,way); src表示初始的mat对象: dest表示转换后的mat对象: way表示以何种方式转换. 举个例子: int main() { //定义路径 string path = "Resources//test.png"; //Mat:opencv引入的矩阵数据类型,处理所有图像 Mat img = imread(path); //创建一个新的mat对象,用来

  • Python使用Opencv实现边缘检测以及轮廓检测的实现

    边缘检测 Canny边缘检测器是一种被广泛使用的算法,并被认为是边缘检测最优的算法,该方法使用了比高斯差分算法更复杂的技巧,如多向灰度梯度和滞后阈值化. Canny边缘检测器算法基本步骤: 平滑图像:通过使用合适的模糊半径执行高斯模糊来减少图像内的噪声. 计算图像的梯度:这里计算图像的梯度,并将梯度分类为垂直.水平和斜对角.这一步的输出用于在下一步中计算真正的边缘. 非最大值抑制:利用上一步计算出来的梯度方向,检测某一像素在梯度的正方向和负方向上是否是局部最大值,如果是,则抑制该像素(像素不属于

  • OpenCV半小时掌握基本操作之边缘检测

    目录 概述 Scharr 算子 Laplacian 算子 Sobel vs Scharr vs Laplacian Canny 边缘检测 高斯滤波器 梯度和方向 非极大值抑制 双阈值检测 [OpenCV]⚠️高手勿入! 半小时学会基本操作⚠️ 边缘检测 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 12 课) Scharr 算子 Scharr 算子和 Sobel 算子基本一样. 只是卷积核系数不同. Sch

  • OpenCV半小时掌握基本操作之圆圈检测

    [OpenCV]⚠️高手勿入! 半小时学会基本操作 ⚠️ 圆圈检测 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 霍夫圆变换 霍夫圆变换 (Hough Circle Transform) 的原理和霍夫直线变换类似. 对于一条直线, 我们可以用参数 (r, θ) 表示, 对于圆我们需要三个参数 (x, y, r), 分别代表三个参数 x 圆心, y 圆心, r, 半径. 代码实现 因为霍夫圆检测对噪声比较敏感, 所

  • OpenCV半小时掌握基本操作之直线检测

    目录 概述 霍夫直线变换 原理详解 代码实战 HoughLines HoughLinesP [OpenCV] ⚠️高手勿入! 半小时学会基本操作 ⚠️ 直线检测 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 13 课) 霍夫直线变换 霍夫变换 (Hough Line Transform) 是图像处理中的一种特征提取技术. 通过平面空间到极值坐标空间的转换, 可以帮助我们实现直线检测. 如图: 原理详解 当我

  • OpenCV半小时掌握基本操作之图像梯度

    目录 概述 梯度运算 礼帽 黑帽 Sobel 算子 计算 x 计算 y 计算 x+y 融合 [OpenCV]⚠️高手勿入! 半小时学会基本操作⚠️图像梯度 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 梯度运算 梯度: 膨胀 (Dilating) - 腐蚀 (Eroding). 例子: # 读取图片 pie = cv2.imread("pie.jpg") # 核 kernel = np.ones((7,

  • OpenCV半小时掌握基本操作之色彩空间

    目录 概述 色彩空间 色彩空间转换 视频阈值 [OpenCV]⚠️高手勿入! 半小时学会基本操作⚠️色彩空间 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 6 课) 色彩空间 色彩空间 (Color Space) 即以同的空间维度来表示某一色彩 (通常使用 3 个或者 4 个 值). 常见的色彩空间: RGB HSV HIS YCrCb YUV 色彩空间转换 原图: 代码实现: import numpy a

  • OpenCV半小时掌握基本操作之像素加减乘除&逻辑运算

    目录 概述 加减乘除 相加 相减 相乘 相除 逻辑运算 逻辑与 逻辑或 逻辑反 [OpenCV]⚠️高手勿入! 半小时学会基本操作⚠️像素加减乘除 & 逻辑运算 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 加减乘除 原图: 相加 import cv2 def add(image1, image2): """相加""" result = cv2.add(i

  • OpenCV半小时掌握基本操作之分水岭算法

    [OpenCV]⚠️高手勿入! 半小时学会基本操作 ⚠️ 分水岭算法 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 分水岭算法 分水岭算法 (Watershed Algorithm) 是一种图像区域分割算法. 在分割的过程中, 分水岭算法会把跟临近像素间的相似性作为重要的根据. 分水岭分割流程: 读取图片 转换成灰度图 二值化 距离变换 寻找种子 生成 Marker 分水岭变换 距离变换 距离变换 (Distan

  • OpenCV半小时掌握基本操作之图像轮廓

    目录 概述 图像轮廓 绘制轮廓 轮廓特征 轮廓近似 边界矩形 外接圆 [OpenCV]⚠️高手勿入! 半小时学会基本操作 ⚠️ 图像轮廓 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 图像轮廓 cv2.findContours可以帮助我们查找轮廓. 格式: cv2.findContours(image, mode, method, contours=None, hierarchy=None, offset=Non

  • OpenCV半小时掌握基本操作之直方图

    [OpenCV]⚠️高手勿入!⚠️ 半小时学会基本操作 ⚠️ 直方图 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 20 课) 直方图 原图: cv2.calcHist()可以帮助我们统计像素并得到直方图. 格式: calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None) 参数: images: 输入图像 c

  • OpenCV半小时掌握基本操作之对象测量

    目录 概述 对象测量 多边形拟合 计算对象中心 [OpenCV]⚠️高手勿入! 半小时学会基本操作 ⚠️ 对象测量 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 对象测量 对象测量可以帮助我们进行矩阵计算: 获取弧长与面积 多边形拟合 计算图片对象中心 原点距: 中心距: 图像重心坐标: 多边形拟合 步骤: 读取图片 转换成灰度图 二值化 轮廓检测 计算轮廓周长 多边形拟合 格式: cv2.approxPolyD

随机推荐