import cv2 as cv
import numpy as np
def edge_demo(image):
blurred = cv.GaussianBlur(image, (3, 3), 0)#1#高斯模糊,这些值要低,降躁 太高容易#提取不出来 步骤1 高斯滤波
gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)#2 变灰度
edge_output = cv.Canny(gray, 50, 150) # edge
cv.imshow("Canny Edge", edge_output)
###一
dst = cv.bitwise_and(image, image, mask=edge_output)#5二值图像输出
cv.imshow("Color Edge", dst)
xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)#3 # X 边缘检测垂直变梯度
ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)#3 # Y 边缘检测水平变梯度
edge_output = cv.Canny(xgrad, ygrad, 50, 150)#4非最大信号抑制,低值50 控制边缘#连接,高值150 控制强边缘的初始分割。默认是低与高是1:3的值
cv.imshow("Canny_ xgrad_ygrad",edge_output)
print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/example/1.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
edge_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
原图效果
Canny Edge效果
Color Edge效果
Canny_ xgrad_ygrad效果