多语言展示
当前在线:506今日阅读:23今日分享:25

python3+opencv3用拉普拉斯算子实现边缘检测

图像处理过程中边缘检测常采用索贝尔,拉普拉斯算子等方法。广泛用于各种处理方法前期加工之中,方法也很多。本文采用python的opencv函数库使用Laplacian算子实现边缘检测。
工具/原料
1

pycharm和windows7环境

2

python3环境下opencv3模块

方法/步骤
1

理论描述:根据官网描述和图形描绘,第一张图可知:diyiznag可以形象得知,强度的一阶导数,边缘的特征是最大值,是像素强度显示“跳跃”或强度的高变化。第二张图可知二阶导数为零时,是边缘跳跃或强度的高变化。也就是边缘。这两张图非常形象的描绘了边缘检测的理论基础。

2

为了简单,自己构建了一个米框图,便于观察!import cv2 as cvimport numpy as npimport matplotlib.pyplot as pltimage = cv.imread('c:\\black_MiLine.png',0)cv.imshow('image',image)cv.waitKey(0)

3

Laplacian函数简介:dst = cv.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])前两个是必须的参数:第一个原图像;第二个是图像的深度,-1表示与原图像相同深度。目标图像深度必须大于等于原图像深度;其后是可选的参数:dst目标图像;ksize是算子的大小,必须为1、3、5、7。默认为1。scale是缩放导数的比例常数,默认无伸缩系数;delta是可选增量,会加到最终的dst中,默认情况下无额外的值加dst;borderType是判断图像边界模式。缺省cv.BORDER_DEFAULT。

4

进行变换:Laplacian = cv.Laplacian(image, cv.CV_16S, ksize=3)cv.imshow('Laplacian',Laplacian)我们发现输出是会的。没有其他内容。

5

对上述结果进行convertScaleAbs,再看结果!Laplacian_result = cv.convertScaleAbs(Laplacian)print(Laplacian_result)cv.imshow('Laplacian_result',Laplacian_result)cv.waitKey(0)

6

再来一个单步模拟kernel = np.array([[0,-1,0],[-1,4,-1],[0,-1,0]],np.float32)image_tmp = np.float64(image)img_filter = cv.filter2D(image_tmp,-1,kernel)cv.imshow('img_filter',img_filter)cv.waitKey(0)至此完成拉普拉斯算子。

注意事项
1

就两步 1)先cv.Laplacian(image, cv.CV_16S, ksize=3)

2

2)再 cv.convertScaleAbs(Laplacian) 即可

推荐信息