边沿检测(轮子)
常用三种边沿检测:
import cv2 import os import shutil import random import numpy as np def canny(image): image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) image = cv2.GaussianBlur(image, (5, 5), 0) canny = cv2.Canny(image, 30, 150) return canny def sobel(image): # 水平梯度 sobelX = cv2.Sobel(image, cv2.CV_64F, 1, 0) sobelX = np.uint8(np.absolute(sobelX)) # 垂直梯度 sobelY = cv2.Sobel(image, cv2.CV_64F, 0, 1) sobelY = np.uint8(np.absolute(sobelY)) sobelCombined = cv2.bitwise_or(sobelX, sobelY) return sobelCombined def laplacian(image): image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray_lap = cv2.Laplacian(image, cv2.CV_16S,ksize = 3) dst = cv2.convertScaleAbs(gray_lap) return dst if __name__ == '__main__': path = r'C:\Users\shi\Desktop\jyz_out' aug_path = r'C:\Users\shi\Desktop\Result' for i, im in enumerate(os.listdir(path)): print(im) img = cv2.imdecode(np.fromfile(os.path.join(path, im), dtype=np.uint8), cv2.IMREAD_COLOR) img = laplacian(img) cv2.imencode('.png', img)[1].tofile(os.path.join(aug_path, im))