图像处置过程中边缘检测常采用索贝尔,拉普拉斯算子等方式。普遍用于各类处置方式前期加工之中,方式也良多。本文采用python的opencv函数库利用Laplacian算子实现边缘检测。
理论描述:
按照官网描述和图形描画,第一张图可知:diyiznag可以形象得知,强度的一阶导数,边缘的特征是最大值,是像素强度显示“跳跃”或强度的高转变。
第二张图可知二阶导数为零时,是边缘跳跃或强度的高转变。也就是边缘。
这两张图很是形象的描画了边缘检测的理论根本。
为了简单,本身构建了一个米框图,便于不雅察!
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)
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。
进行变换:
Laplacian = cv.Laplacian(image, cv.CV_16S, ksize=3)cv.imshow('Laplacian',Laplacian)
我们发现输出是会的。没有其他内容。
对上述成果进行convertScaleAbs,再看成果!
Laplacian_result = cv.convertScaleAbs(Laplacian)
print(Laplacian_result)
cv.imshow('Laplacian_result',Laplacian_result)
cv.waitKey(0)
再来一个单步模拟
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)
至此完当作拉普拉斯算子。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!