边缘检测原理
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第1张图片](http://img.e-com-net.com/image/info8/75f905fa006a4363a92e8c03b6d1407a.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第2张图片](http://img.e-com-net.com/image/info8/fb47d60633b54a34a1d46e07ef56475d.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第3张图片](http://img.e-com-net.com/image/info8/5ed5ef1f125d47c8a5550f0feaa42796.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第4张图片](http://img.e-com-net.com/image/info8/137fd09130364fc192d4c5c5fa6cd567.jpg)
1,Sobel算子
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第5张图片](http://img.e-com-net.com/image/info8/1879d4ac4f934211942a561f540c0466.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第6张图片](http://img.e-com-net.com/image/info8/e995e236b14149edb73d91f821d4f329.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第7张图片](http://img.e-com-net.com/image/info8/f845dd2446584177991371278a5a2f43.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第8张图片](http://img.e-com-net.com/image/info8/b9a030bfe839471db23b200803d0c783.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第9张图片](http://img.e-com-net.com/image/info8/f4854d03140d4a90bdd867b2ff1a9f46.jpg)
1.1代码实现
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
img = cv.imread("lena.png",0)
x = cv.Sobel(img,cv.CV_16S,1,0)
y = cv.Sobel(img,cv.CV_16S,0,1)
Scale_absX = cv.convertScaleAbs(x)
Scale_absY = cv.convertScaleAbs(y)
result = cv.addWeighted(Scale_absX,0.5,Scale_absY,0.5,0)
plt.figure(figsize=(5,4),dpi=100)
plt.subplot(121),plt.imshow(img,cmap=plt.cm.gray),plt.title("原图")
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(result,cmap = plt.cm.gray),plt.title("sobel滤波后结果")
plt.xticks([]),plt.yticks([])
plt.show()
1.2结果展示
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第10张图片](http://img.e-com-net.com/image/info8/2eb47925ded34f6d9b43010f7805ea34.jpg)
2 Laplacian算子(拉普拉斯)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第11张图片](http://img.e-com-net.com/image/info8/1488113f49034a7e8ad40c05c1c01983.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第12张图片](http://img.e-com-net.com/image/info8/19e7eb2e28cd4d909305beba19dad1bb.jpg)
2.1代码实现
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
img = cv.imread("lena.png",0)
result = cv.Laplacian(img ,cv.CV_16S)
'''cv.Laplacian 函数用于对图像进行 Laplacian 边缘检测。img 是输入的灰度图像,cv.CV_16S 是输出结果的数据类型,
表示存储边缘检测结果的图像矩阵的元素类型为 16 位带符号整数。'''
Scale_abs = cv.convertScaleAbs(result)
'''使用 cv.convertScaleAbs 函数将 result 转换为绝对值图像,使其在显示时不受正负值影响。'''
plt.figure(figsize=(5,4),dpi=100)
plt.subplot(121),plt.imshow(img,cmap=plt.cm.gray),plt.title("原图")
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(Scale_abs,cmap=plt.cm.gray),plt.title("laplacian检测后结果")
plt.xticks([]),plt.yticks([])
plt.show()
2.2结果展示
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第13张图片](http://img.e-com-net.com/image/info8/4251ee8456364135b8786441c2ccac36.jpg)
3 Canny 边缘检测算法
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第14张图片](http://img.e-com-net.com/image/info8/92804f31a4f64da29895cb0e31732d4a.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第15张图片](http://img.e-com-net.com/image/info8/bbe2cb34353c48609812e087bda65dbb.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第16张图片](http://img.e-com-net.com/image/info8/75f0448a137d4391aee8f2d3f45c5bbb.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第17张图片](http://img.e-com-net.com/image/info8/e2b752bcb70b48419bb2216317f15f4e.jpg)
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第18张图片](http://img.e-com-net.com/image/info8/5fce8786f9c9410aa282be1e189d10c7.jpg)
3.1 代码实现
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
img = cv.imread("lena.png",0)
lowThreshold = 0
max_lowThreshold = 100
canny = cv.Canny(img,lowThreshold,max_lowThreshold)
plt.figure(figsize=(5,4),dpi=100)
plt.subplot(121),plt.imshow(img, cmap=plt.cm.gray),plt.title("原图")
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(canny,cmap=plt.cm.gray),plt.title("Canny检测后结果")
plt.xticks([]),plt.yticks([])
plt.show()
3.2 结果展示
![OpenCV实现图像边缘检测(sobel算子、laplacian算子、Canny边缘检测)_第19张图片](http://img.e-com-net.com/image/info8/20c3ecb488e84ebfabe6097744735bc2.jpg)