import cv2 import numpy as np # prewitt算子 def prewitt(img): img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) kernelx = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]], dtype=int) kernely = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=int) x = cv2.filter2D(img, cv2.CV_16S, kernelx) y = cv2.filter2D(img, cv2.CV_16S, kernely) absX = cv2.convertScaleAbs(x) absY = cv2.convertScaleAbs(y) Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5, 0) return Prewitt # sobel算子 def sobel(img): img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_sobel = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5) return img_sobel # laplacian算子 def laplacian(img): img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = cv2.GaussianBlur(img, (5, 5), 0, 0) img_laplacian = cv2.Laplacian(img, cv2.CV_16S, ksize=3) return img_laplacian # log算子 def log(img): img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) image = cv2.copyMakeBorder(img1, 2, 2, 2, 2, borderType=cv2.BORDER_REPLICATE) image = cv2.GaussianBlur(image, (3, 3), 0, 0) m1 = np.array([[0, 0, -1, 0, 0], [0, -1, -2, -1, 0], [-1, -2, 16, -2, -1], [0, -1, -2, -1, 0], [0, 0, -1, 0, 0]], dtype=int) rows, cols = image.shape[: 2] image1 = np.ones((rows, cols), dtype=float) for i in range(2, rows - 2): for j in range(2, cols - 2): image1[i, j] = np.sum(m1 * image[i - 2:i + 3, j - 2:j + 3, 1]) image1 = cv2.convertScaleAbs(image1) return image1 # canny def canny(img): blur = cv2.GaussianBlur(img, (3, 3), 0) grayImage = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY) gradx = cv2.Sobel(grayImage, cv2.CV_16SC1, 1, 0) grady = cv2.Sobel(grayImage, cv2.CV_16SC1, 0, 1) dst = cv2.Canny(gradx, grady, 50, 150) return dst