通道分割
基本操作
模糊(过滤噪音)
-
medianBlur
能很好的过滤椒盐噪声 -
bilateralFilter
有效地保留了边缘
边缘检测
sobel
- scipy.ndimage
from scipy.ndimage.filters import sobel
def sobel_edge(img):
"""
提取sobel边界
:param img:
:return:
"""
imx = np.zeros(img.shape)
imy = np.zeros(img.shape)
sobel(img, 0, imx)
sobel(img, 1, imy)
magnitude = np.sqrt(imx ** 2 + imy ** 2)
return magnitude
- opencv
src = cv.GaussianBlur(src, (3, 3), 0)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
grad_x = cv.Sobel(gray, ddepth, 1, 0, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
# Gradient-Y
# grad_y = cv.Scharr(gray,ddepth,0,1)
grad_y = cv.Sobel(gray, ddepth, 0, 1, ksize=3, scale=scale, delta=delta, borderType=cv.BORDER_DEFAULT)
abs_grad_x = cv.convertScaleAbs(grad_x)
abs_grad_y = cv.convertScaleAbs(grad_y)
grad = cv.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)
laplace
# Since our input is CV_8U we define ddepth = CV_16S to avoid overflow
ddepth = cv.CV_16S
# Apply Laplace function
dst = cv.Laplacian(src_gray, ddepth, kernel_size)
canny
ratio = 3
detected_edges = cv.Canny(img_blur, low_threshold, low_threshold*ratio, kernel_size)