导入cv2库和基本库,输入一张彩色图像:
import matplotlib.pyplot as plt
import cv2
import numpy as np
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['font.size']=13
image = plt.imread(r"C:\Users\86182\9816.jpg_wh860.jpg")
para = np.array([0.299,0.587,0.114])
img = np.dot(image,para)
plt.imshow(image)
展示图片
进行sobel算子处理,水平和垂直边缘
plt.figure(figsize=(14,16))
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize = 3)
sobelx = cv2.convertScaleAbs(sobelx) # 转回uint8
sobelxy = cv2.Sobel(img,cv2.CV_64F,1,1)
sobelxy = cv2.convertScaleAbs(sobelxy) # 转回uint8
plt.subplot(1,2,1)
plt.title('灰度图')
plt.imshow(img,cmap="gray")
plt.subplot(1,2,2)
plt.title('Soble水平边缘')
plt.imshow(sobelx,cmap="gray")
plt.figure(figsize=(14,16))
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize = 3)
sobely = cv2.convertScaleAbs(sobely) # 转回uint8
plt.subplot(1,2,1)
plt.title('灰度图')
plt.imshow(img,cmap="gray")
plt.subplot(1,2,2)
plt.title('Soble垂直边缘')
plt.imshow(sobely,cmap="gray")
Roberts算子处理
# 读取图像
img = cv2.imread(r"C:\Users\86182\9816.jpg_wh860.jpg", cv2.COLOR_BGR2GRAY)
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Roberts 算子
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)
x = cv2.filter2D(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)
# 转 uint8 ,图像融合
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
Prewitt 算子处理
# 读取图像
rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Prewitt 算子
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(grayImage, cv2.CV_16S, kernelx)
y = cv2.filter2D(grayImage, cv2.CV_16S, kernely)
# 转 uint8 ,图像融合
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
canny算子处理
img = cv2.imread(r"C:\Users\86182\9816.jpg_wh860.jpg", 0)
edges = cv2.Canny(img, 100, 200)
最后的效果图