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:])
相关推荐
Hesionberger几秒前
LeetCode 78:子集生成全攻略
java·开发语言·数据结构·python·算法·leetcode·职场和发展
前端之虎陈随易3 分钟前
为什么今天还会有新语言?MoonBit 想解决什么问题?
大数据·linux·javascript·人工智能·算法·microsoft·typescript
python零基础入门小白3 分钟前
Transformer、Token、RAG全解析,一篇读懂大模型核心机制!
人工智能·深度学习·学习·语言模型·大模型·transformer·产品经理
庞轩px6 分钟前
AI辅助编程的边界——Cursor实战与工程判断力
人工智能·ai·大模型·prompt·code review·aicoding
Baihai IDP9 分钟前
为什么 AI Agent 重新爱上了文件系统(Filesystems)
人工智能·ai·llm·agi
70asunflower13 分钟前
从需求洞察到生态博弈
人工智能·芯片
veminhe16 分钟前
python(五)rag学习一:02向量
python
~kiss~19 分钟前
How OpenAI delivers low-latency voice AI at scale - OpenAI 如何规模化实现低延迟语音 AI
人工智能
后端小肥肠19 分钟前
白嫖小云雀 API 200 秒免费额度,封装 Skill,玩转 Seedance2.0 视频
人工智能·agent
河西石头20 分钟前
听AI的血的教训!PPOCRLabel部署与PyQt5的安装避坑-百分百成功!
开发语言·人工智能·python·pyqt5安装·ppocrlabel的部署