本篇文章介绍如何用OpenCV-Python来使用Laplacian算子。
提示:
图像中的边缘区域,像素值会发生“跳跃”,对这些像素求导,在其一阶导数在边缘位置为极值,这就是Sobel算子使用的原理——极值处就是边缘。如下图(下图来自OpenCV官方文档):
如果对像素值求二阶导数,会发现边缘处的导数值为0。如下(下图来自OpenCV官方文档):
Laplace函数实现的方法是先用Sobel 算子计算二阶x和y导数,再求和:(CSDN,你打水印,让我的公式怎么办?)
在OpenCV-Python中,Laplace算子的函数原型如下:
dst = cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])如果看了上一篇Sobel算子的介绍,这里的参数应该不难理解。
前两个是必须的参数:
其后是可选的参数:
这里还是以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》