OpenCV3-Python(6)边缘检测

sobel算子

单方向求导
cv.Sobel(img, ddepth, dx, dy, dst, ksize, scale)

  • ddepth:图像深度
  • ksize:sobel算子大小,默认为3 如果为-1,则使用Scharr进行边缘检测

原图是uint8,导数求出来会有截断,也就是说可能会有超出/小于范围的值,临时转成16位(ddepth设置成cv.CV_16S),随后再用cv.convertScaleAbs()转换成uint8格式

x=cv.Sobel(img, cv.CV_16S, 1, 0) # x方向
y=cv.Sobel(img, cv.CV_16S, 0, 1)  # y方向
Scale_absX = cv.convertScaleAbs(x)
Scale_absY = cv.convertScaleAbs(y)
result = cv.addweighted(0.5, Scale_absX , 0.5, Scale_absY, 0) #混合两个方向

Laplacian算子

laplacian = cv.Laplacian(img, ddepth, dst, ksize, scale)

laplacian=cv.Laplacian(img, cv.CV_16S)
result = cv.convertScaleAbs(laplacian)

Canny边缘检测

cv.Canny(img, treshold1, treshold2)
treshold1:minval,较小的阈值将间断的边缘连接起来
treshold2:maxval,较大的阈值检测图像中明显的边缘

你可能感兴趣的:(OpenCV,计算机视觉,人工智能)