You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.8 KiB
51 lines
1.8 KiB
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 |