OpenCV:边缘检测(Sobel算子、Canny)
import cv2
import numpy as np
img = cv2.imread('可莉.png', 0)
img = cv2.resize(img, (354, 683))
cv2.imshow('原图', img)
img_S_X = cv2.Sobel(img, -1, 1, 0, ksize=3)
img_S_Y = cv2.Sobel(img, -1, 0, 1, ksize=3)
'''cv2.Sobel(src, ddepth, dx, dy, ksize)
src:输入图像
ddepth:图像深度,-1表示与输入图像深度相同,深度只能大于等于输入图像
dx, dy:x,y方向求导次数
ksize:Sobel算子大小,只能为奇数
'''
# cv2.imshow('Sobel算子X', img_S_X)
# cv2.imshow('Sobel算子Y', img_S_Y)
img_S = np.hstack((img_S_X, img_S_Y)) #将两张图片在一个窗口显示
cv2.imshow('Sobel算子', img_S)
img_G = cv2.Canny(img, 80, 130, apertureSize=3, L2gradient=False)
'''cv2.Canny(image, threshold1, threshold2, apertureSize, L2gradient)
image:要进行边缘检测的输入图像(单通道)。
threshold1:第一个阈值,用于边缘检测中的滞后阈值。
threshold2:第二个阈值,用于边缘检测中的滞后阈值。
edges:用于存储边缘检测的结果。
apertureSize:Sobel算子的大小。只能为奇数
L2gradient:True:使用L2范数运算,False:使用L1范数运算。
'''
cv2.imshow('Canny', img_G)
cv2.waitKey(0)
cv2.destroyAllWindows()
https://www.bilibili.com/video/BV1m34y1n7wY/?spm_id_from=333.788