OpenCV-Python教程(7、Laplacian算子)

本文介绍如何使用OpenCV-Python实现Laplacian算子,包括算子原理、函数原型、参数说明及示例代码。

本篇文章介绍如何用OpenCV-Python来使用Laplacian算子。

提示:

  • 转载请详细注明原作者及出处,谢谢!
  • 本文介绍使用在OpenCV-Python中使用Laplacian函数
  • 本文不介详细的理论知识,读者可从其他资料中获取相应的背景知识。笔者推荐清华大学出版社的《图像处理与计算机视觉算法及应用(第2版) 》。

Laplacian算子

图像中的边缘区域,像素值会发生“跳跃”,对这些像素求导,在其一阶导数在边缘位置为极值,这就是Sobel算子使用的原理——极值处就是边缘。如下图(下图来自OpenCV官方文档):


如果对像素值求二阶导数,会发现边缘处的导数值为0。如下(下图来自OpenCV官方文档):


Laplace函数实现的方法是先用Sobel 算子计算二阶x和y导数,再求和:(CSDN,你打水印,让我的公式怎么办?)

函数原型

在OpenCV-Python中,Laplace算子的函数原型如下:

dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
如果看了上一篇Sobel算子的介绍,这里的参数应该不难理解。

前两个是必须的参数:

  • 第一个参数是需要处理的图像;
  • 第二个参数是图像的深度,-1表示采用的是与原图像相同的深度。目标图像的深度必须大于等于原图像的深度;

其后是可选的参数:

  • dst不用解释了;
  • ksize是算子的大小,必须为1、3、5、7。默认为1。
  • scale是缩放导数的比例常数,默认情况下没有伸缩系数;
  • delta是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
  • borderType是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT

使用

这里还是以Sobel一文中的石狮作为测试图像,下面是测试代码:

#coding=utf-8
import cv2
import numpy as np  

img = cv2.imread("D:/lion.jpg", 0)

gray_lap = cv2.Laplacian(img,cv2.CV_16S,ksize = 3)
dst = cv2.convertScaleAbs(gray_lap)

cv2.imshow('laplacian',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
为了让结果更清晰,这里的ksize设为3,效果图如下:

有点像粉笔画,是吧。这是因为原图像未经过去噪就直接处理了。可以通过滤波一文中,使用低通滤波一节中高斯模糊来先处理一下再用拉普拉斯函数。

参考资料:

1、《Opencv2 Computer Vision Application Programming Cookbook》

2、《OpenCV References Manule》

如果觉得本文写的还可以的话,请轻点“顶”,您的支持是我写下去的动力之一。未完待续。。。如有错误请指正,本人会虚心接受并改正!谢谢!
### Sobel算子实现图像边缘检测 Sobel算子是一种基于图像梯度的一阶导数算子,能够检测图像中的水平和垂直边缘,对噪声具有一定的抑制作用,并且在灰度渐变较多的图像中表现良好。在OpenCV中,使用`cv2.Sobel()`函数实现Sobel边缘检测。 该函数的参数包括输入图像、输出图像的深度(通常使用`cv2.CV_64F`以避免溢出)、x方向和y方向的导数阶数(0表示不计算)、卷积核大小(通常为3)等。最后,通过计算x和y方向梯度的幅值合成整体边缘图。 ```python import cv2 import numpy as np # 读取图像 image = cv2.imread('image.jpg', 0) # Sobel边缘检测 sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3) sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3) sobel_combined = cv2.magnitude(sobel_x, sobel_y) sobel_combined = np.uint8(sobel_combined) ``` Sobel算子可以提供方向信息,适用于需要边缘方向的场景[^1]。 ### Laplacian算子实现图像边缘检测 Laplacian算子是一种二阶导数算子,通过计算图像中每个像素点的二阶导数来检测边缘,边缘定位更准确。然而,它对噪声非常敏感,容易受到图像中噪声的影响。在OpenCV中,使用`cv2.Laplacian()`函数实现Laplacian边缘检测。 该函数的参数包括输入图像、输出图像的深度以及卷积核大小(默认为1,即3×3核)。由于Laplacian算子不区分方向,因此只需一次卷积操作即可得到边缘结果。 ```python # Laplacian边缘检测 laplacian = cv2.Laplacian(image, cv2.CV_64F) laplacian = np.uint8(np.absolute(laplacian)) ``` Laplacian算子适合对边缘定位要求较高的任务,但通常需要在预处理阶段对图像进行平滑处理以减少噪声影响[^3]。 ### 显示与比较 将Sobel和Laplacian的边缘检测结果进行显示,可以使用OpenCV的窗口显示函数。 ```python cv2.imshow('Sobel Combined', sobel_combined) cv2.imshow('Laplacian', laplacian) cv2.waitKey(0) cv2.destroyAllWindows() ``` 两种方法在边缘增强中各有优势,Sobel更适合噪声较多的图像,而Laplacian在边缘定位上更为精确[^4]。
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值