Roberts算子提取图像边缘

 本次实验以一幅岩心图像为例,通过Roberts算子对图像进行边缘提取。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
 
# 读取图像
grayImage = cv2.imread('E:/shale10053.bmp', cv2.IMREAD_GRAYSCALE)
grayImage = cv2.GaussianBlur(grayImage, (3,3), 0) #对灰度图像进行高斯滤波 
# 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)

# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 显示图形
plt.subplot(121),plt.imshow(grayImage,cmap=plt.cm.gray),plt.title('原始图像'), plt.axis('on') #坐标轴关闭
plt.subplot(122),plt.imshow(Roberts, cmap=plt.cm.gray ),plt.title('Roberts算子'), plt.axis('on')
plt.show()

运行结果如下所示, (用cv2.imwrite显示效果会更好)

猜你喜欢

转载自blog.csdn.net/Zhaohui_Zhang/article/details/120517085