设计3*3的模板,对一副测试图像进行正负45度的边缘检测。

sobel:

import cv2
import matplotlib.pyplot as plt

# 读图
img = cv2.imread('lena.jpg')
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 灰度化
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Sobel
x = cv2.Sobel(grayImage, cv2.CV_16S, 1, 0)  # 对x求一阶导
y = cv2.Sobel(grayImage, cv2.CV_16S, 0, 1)  # 对y求一阶导
absX = cv2.convertScaleAbs(x)               # 绝对值,并将图像转换为8位图显示
absY = cv2.convertScaleAbs(y)
Sobel = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)


plt.rcParams['font.sans-serif'] = ['SimHei']

# 显示
plt.subplot(121), plt.imshow(img_RGB), plt.title('原始图像'), plt.axis('off')  # 坐标轴关闭
plt.subplot(122), plt.imshow(Sobel, cmap=plt.cm.gray), plt.title('Sobel算子'), plt.axis('off')

plt.show()

分割:

import matplotlib.pyplot as plt
import cv2
import numpy as np

# 读
img = cv2.imread("lena.jpg")

fil1 = np.array([[2, 2, 0],
				[2, 0, -2],
				[0, -2, 2]])


fil2 = np.array([[0, 1, 0],
				[-1, 0, 1],
				[0, -1, 0]])

res1 = cv2.filter2D(img, -1, fil1)
res2 = cv2.filter2D(img, -1, fil2)

plt.figure()
plt.subplot(1, 2, 1)  # 用于直接指定划分方式和位置进行绘图
plt.imshow(res1)
plt.subplot(1, 2, 2)
plt.imshow(res2)

plt.show()

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐