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:])
相关推荐
用户6915811416535 分钟前
Ascend Extension for PyTorch的源码解析
人工智能
努力的家伙是不讨厌的38 分钟前
解析json导出csv或者直接入库
开发语言·python·json
-Nemophilist-1 小时前
机器学习与深度学习-1-线性回归从零开始实现
深度学习·机器学习·线性回归
云空1 小时前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
成富2 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
凤枭香2 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
CSDN云计算2 小时前
如何以开源加速AI企业落地,红帽带来新解法
人工智能·开源·openshift·红帽·instructlab
测试杂货铺2 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森2 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
hairenjing11232 小时前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机