016 OpenCV Laplacian边缘检测

目录

一、环境

二、拉普拉斯原理

三、完整代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、拉普拉斯原理

拉普拉斯算子是一种常用于图像处理的边缘检测技术,它有助于识别图像中的边缘和纹理特征。原理上,拉普拉斯算子是利用二阶差分计算边缘的。在一阶微分图中,极大值或极小值被认为是边缘;在二阶微分图中,极大值和极小值之间的过0点也被认为是边缘。

具体来说,拉普拉斯算子的一阶差分定义为f ' (x) = f (x) - f (x - 1),二阶差分定义为f ' (x) = (f (x + 1) - f (x)) - (f (x) - f (x - 1))。化简后得到f ' (x) = f (x - 1) - 2 f (x)) + f (x + 1)。在二维的情况下,拉普拉斯算子定义为f ' (x, y) = -4 f (x, y) + f (x-1, y) + f (x+1, y) + f (x, y-1) + f (x, y+1)。

因此,拉普拉斯算子具有各方向同性的特点,能够对任意方向的边缘进行提取,具有无方向性的优点,使用Laplacian算子提取边缘不需要分别检测X方向的边缘和Y方向的边缘,只需要一次边缘检测即可。

cv2.Laplacian()是OpenCV库中的一个函数,用于进行图像的拉普拉斯边缘检测。

该函数的基本语法如下:

python 复制代码
cv2.Laplacian(src, ddepth, ksize[, dst[, scale[, delta[, borderType]]]])

参数说明:

  • src: 输入图像,通常为灰度图。
  • ddepth: 输出图像的深度,可选参数,默认值为-1,表示与输入图像相同。
  • ksize: 用于计算拉普拉斯算子的核大小,必须为奇数。
  • dst: 输出图像,可选参数,默认值为None。
  • scale: 可选参数,默认值为1。
  • delta: 可选参数,默认值为0。
  • borderType: 可选参数,默认值为cv2.BORDER_DEFAULT。

返回值:

  • dst: 经过拉普拉斯边缘检测后的输出图像。

三、完整代码

python 复制代码
"""
使用拉普拉斯检测图像边缘
"""
import sys
import cv2 as cv

def main(argv):
    # 边缘输出数据类型,后续转uint8
    ddepth = cv.CV_16S
    kernel_size = 3
    window_name = "Laplace Demo"
    # 读个图片
    imageName = argv[0] if len(argv) > 0 else 'data/lena.jpg'
    src = cv.imread(cv.samples.findFile(imageName), cv.IMREAD_COLOR) 
    if src is None:
        print ('Error opening image')
        print ('Program Arguments: [image_name -- default lena.jpg]')
        return -1
    # 高斯降噪
    src = cv.GaussianBlur(src, (3, 3), 0)
    # 彩色图转灰度图
    src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    cv.namedWindow(window_name, cv.WINDOW_AUTOSIZE)
    # 拉普拉斯检测边缘
    dst = cv.Laplacian(src_gray, ddepth, ksize=kernel_size)
    # 边缘数据类型转为uint8
    abs_dst = cv.convertScaleAbs(dst)
    cv.imshow(window_name, abs_dst)
    cv.waitKey(0)
    return 0

if __name__ == "__main__":
    main(sys.argv[1:])
相关推荐
清水白石00814 小时前
Python 纯函数编程:从理念到实战的完整指南
开发语言·python
twilight_46914 小时前
机器学习与模式识别——机器学习中的搜索算法
人工智能·python·机器学习
冰西瓜60014 小时前
深度学习的数学原理(十)—— 权重如何自发分工
人工智能·深度学习·计算机视觉
niuniudengdeng14 小时前
基于时序上下文编码的端到端无文本依赖语音分词模型
人工智能·数学·算法·概率论
Jia ming15 小时前
《智能法官软件项目》—罪名初判模块
python·教学·案例·智能法官
Jia ming15 小时前
《智能法官软件项目》—法律文书生成模块
python·教学·案例·智能法官软件
曦月逸霜15 小时前
Python数据分析——个人笔记(持续更新中~)
python
海棠AI实验室15 小时前
第六章 从“能用”到“能交付”的关键一刀:偏好对齐(Preference Alignment)数据工程
python·私有模型训练
百锦再15 小时前
Java多线程编程全面解析:从原理到实战
java·开发语言·python·spring·kafka·tomcat·maven
Soonyang Zhang15 小时前
flashinfer attention kernel分析
人工智能·算子·推理框架