OpenCV-Python教程(7、Laplacian算子) 今天药忘吃喽~ 2022-01-16 01:05 211阅读 0赞 本篇文章介绍如何用OpenCV-Python来使用Laplacian算子。 **提示:** * 转载请详细注明原作者及出处,谢谢! * 本文介绍使用在OpenCV-Python中使用Laplacian函数 * 本文不介详细的理论知识,读者可从其他资料中获取相应的背景知识。笔者推荐清华大学出版社的《图像处理与计算机视觉算法及应用(第2版) 》。 ## Laplacian算子 ## 图像中的边缘区域,像素值会发生“跳跃”,对这些像素求导,在其一阶导数在边缘位置为极值,这就是Sobel算子使用的原理——极值处就是边缘。如下图(**下图来自OpenCV官方文档**): ![Center][] 如果对像素值求二阶导数,会发现边缘处的导数值为0。如下(**下图来自OpenCV官方文档**): ![Center 1][] Laplace函数实现的方法是先用Sobel 算子计算二阶x和y导数,再求和:(CSDN,你打水印,让我的公式怎么办?) ![Center 2][] ## 函数原型 ## 在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,效果图如下: ![Center 3][] 有点像粉笔画,是吧。这是因为原图像未经过去噪就直接处理了。可以通过[滤波一文][Link 1]中,使用低通滤波一节中高斯模糊来先处理一下再用拉普拉斯函数。 ## 参考资料: ## 1、《Opencv2 Computer Vision Application Programming Cookbook》 2、《OpenCV References Manule》 如果觉得本文写的还可以的话,请轻点“顶”,您的支持是我写下去的动力之一。未完待续。。。如有错误请指正,本人会虚心接受并改正!谢谢! [Center]: /images/20220115/a1357b064a944419b90d42af13831faf.png [Center 1]: /images/20220115/6dcc915804b347cbb3e61406898f73e3.png [Center 2]: /images/20220115/412447c516574a5abd0d3044e718ca22.png [Center 3]: /images/20220115/809401f0ca3b4d43b1cefc60508fe9d3.png [Link 1]: http://blog.csdn.net/sunny2038/article/details/9155893
还没有评论,来说两句吧...