本次实验以一幅岩心图像为例 通过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显示效果会更好



