1.用opencv读取单通道png文件的时候发现,读取后的图像变量是3通道,网上查了下imread函数的参数。
PIL读取单通道的图像结果还是单通道,不存在opencv的问题。
2.显示,在进行matplotlib进行单通道图像显示的时候发现显示结果不是很正常,于是查了下,下面代码可以正常显示。
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('/home/kitty/workspace/lesson-2/data/train/image/1.png', 0)
print(img.size)
plt.figure(1)
plt.imshow(img, cmap='Greys_r')
plt.show()
3.PIL和opencv还有一点区别,opencv的图像变量存在一个array成员保存图像像素数据,PIL.Image变量则没有,使用PIL.Image想获取图像的像素数据可以采用下面的方法。
from PIL import Image
import numpy as np
img3 = Image.open('/home/kitty/workspace/lesson-2/data/train/image/1.png');
img3.show()
print(img3.size)
#1
img_data = img3.load()
img_data[10,10] # img_data[x,y]
#2
img3.getpixel((10,10))
#3
img_np = np.array(img3)
附录:(imread的相关参数)
cv.IMREAD_UNCHANGED = -1, 原格式读入,透明度保留,实际上并不会根据文件的后缀格式读入文件;
cv.IMREAD_GRAYSCALE = 0,读入单通道文件,与BGR2GRAY得到的数据不一致;
cv.IMREAD_COLOR = 1, 读入彩色图,透明度被忽略
cv.IMREAD_ANYDEPTH = 2, 读入深度不限制
cv.IMREAD_ANYCOLOR = 4, 读入色彩不限制
cv.IMREAD_LOAD_GDAL = 8,
cv.IMREAD_REDUCED_GRAYSCALE_2 = 16, 另一种单通道读入;
cv.IMREAD_REDUCED_COLOR_2 = 17,
cv.IMREAD_REDUCED_GRAYSCALE_4 = 32,
cv.IMREAD_REDUCED_COLOR_4 = 33,
cv.IMREAD_REDUCED_GRAYSCALE_8 = 64,
cv.IMREAD_REDUCED_COLOR_8 = 65,
cv.IMREAD_IGNORE_ORIENTATION = 128
参考文献: