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

图像处置过程中边缘检测常采用索贝尔 , 拉普拉斯算子等方式 。 普遍用于各类处置方式前期加工之中 , 方式也良多 。 本文采用python的opencv函数库利用Laplacian算子实现边缘检测 。

需要这些哦
pycharm和windows7情况
python3情况下opencv3模块
方式/
1理论描述:
按照官网描述和图形描画 , 第一张图可知:diyiznag可以形象得知 , 强度的一阶导数 , 边缘的特征是最大值 , 是像素强度显示“跳跃”或强度的高转变 。
第二张图可知二阶导数为零时 , 是边缘跳跃或强度的高转变 。 也就是边缘 。
这两张图很是形象的描画了边缘检测的理论根本 。

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

文章插图

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

文章插图

2为了简单 , 本身构建了一个米框图 , 便于不雅察!
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
image = cv.imread('c:\\black_MiLine.png',0)
cv.imshow('image',image)
cv.waitKey(0)

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

文章插图

3Laplacian函数简介:
dst = cv.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])
前两个是必需的参数:
第一个原图像;
第二个是图像的深度 , -1暗示与原图像不异深度 。 方针图像深度必需大于等于原图像深度;
厥后是可选的参数:
dst方针图像;
ksize是算子的大小 , 必需为1、3、5、7 。 默认为1 。
【python3+opencv3用拉普拉斯算子实现边缘检测】scale是缩放导数的比例常数 , 默认无伸缩系数;
delta是可选增量 , 会加到最终的dst中 , 默认环境下无额外的值加dst;
borderType是判定图像鸿沟模式 。 缺省cv.BORDER_DEFAULT 。

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

文章插图

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

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

文章插图

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

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

文章插图

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)
至此完当作拉普拉斯算子 。

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

文章插图

注重事项就两步 1)先cv.Laplacian(image, cv.CV_16S, ksize=3)
2)再 cv.convertScaleAbs(Laplacian) 即可

以上内容就是python3+opencv3用拉普拉斯算子实现边缘检测的内容啦 , 希望对你有所帮助哦!

    推荐阅读