本章主要讲解 图像的读取方式、灰度化操作、图像转化为矩阵的方法
假设 strImgPath是图像的路径, img对象将图片读入到内存中
读取图像的第一种方式:skImage
from skimage import io img=io.imread(strImgPath) # 读出的3D
读取图像的第二种方式:matplotlib
import matplotlib.image as mpimg #mpimg 用于读取图片 import matplotlib.pyplot as plt # plt 用于显示图片 img = mpimg.imread(strImgPath) # 读取图像 plt.imshow(lena) # 显示图片 plt.axis('off') # 不显示坐标轴 plt.show()
# 2、显示图片的第一个通道 lena_1 = lena[:,:,0] plt.imshow('lena_1') plt.show()
# 此时会发现显示的是热量图,不是我们预想的灰度图,可以添加 cmap 参数,有如下几种添加方法: #方法一 plt.imshow('lena_1', cmap='Greys_r') plt.show()
#方法二 img = plt.imshow('lena_1') img.set_cmap('gray') # 'hot' 是热量图 plt.show()
#3、将 RGB 转为灰度图 def rgb2gray(rgb): return np.dot(rgb[...,:3], [0.299, 0.587, 0.114]) gray = rgb2gray(lena) # 也可以用 plt.imshow(gray, cmap = plt.get_cmap('gray')) plt.imshow(gray, cmap='Greys_r') plt.axis('off') plt.show()
第三种方式: PIL
PIL模块提供有对图像操作的基本方法;
Image.convert() 根据不同的参数可以把图片转化为不同的灰度图像,其中参数”L”是最常见的参数;
转化为矩阵的方式可以用numpy模块的asarrsy() 也可以用numpy的matrix()
from PIL import Image img=Image.open(strImgPath) img=np.asarray(strImgPath) # 转换为矩阵 im = im.convert("L") # 灰度化 data = im.getdata()# 获取灰度化以后的矩阵 data = np.matrix(data,dtype='float')/255.0 # 对矩阵进行二值化PS 这种方式很low, 大津法效果更好,cv2的二值化就是用大津法
第四种方式:opencv
Cv2是opencv的python版,很多函数名称和操作方式和C++实现的opencv很相像,在此不赘述。
import cv2 img= = cv2.imread(strImgPath) # 读取图像 img2gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图片压缩为单通道的灰度图