原文链接:http://www.juzicode.com/archives/2514
matplotlib中显示二维图像不再使用plot()方法,而是有专用的api接口imshow(),接受二维数组和特定形状的三维数组,如果是三维数组第三维是3或者4,3正好对应rdb三通道彩色图像,4正好对应带alpha通道的彩色图像。
使用pyplot.imshow()显示numpy数组,入参为numpy类型:
import matplotlib.pyplot as plt
import numpy as np
IMAGE_ROW = 512
IMAGE_COL = 512
if __name__ == '__main__':
plt.rc('font',family='Youyuan',size='9')
plt.rc('axes',unicode_minus='False')
image = np.zeros((IMAGE_ROW,IMAGE_COL),)#dtype=np.uint8)#指定numpy数组大小
for row in range(IMAGE_ROW): #给numpy输入赋值
for col in range(IMAGE_COL):
image[row][col] = col
print(image)
plt.imshow(image) #用imshow方法画图numpy数组
plt.title('显示numpy数组, by桔子code')
plt.show()
matplotlib从图片文件读出数据显示,先使用pyplot.imread()方法读出文件得到一个img实例,再用pyplot.imshow(img)方法显示文件:
print('\n-----欢迎来到juzicode.com')
print('-----公众号: 桔子code/juzicode \n')
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
plt.rc('font',family='Youyuan',size='9')
plt.rc('axes',unicode_minus='False')
plt.title('matplot显示图片 by桔子code')
img=plt.imread("lena.jpg") #读取文件图片
print('type(img):',type(img))
plt.imshow(img) #imshow
plt.show()
可以用type()打印出pyplot.imread()读取文件返回的数据类型:
print('type(img):',type(img))
从结果看实际仍然是’numpy.ndarray’:
type(img):
用imread()读出的数据类型和前面例子中手动生成numpy类型数组效果一样 。
用opencv读出图片显示的例子:
import numpy as np
import matplotlib.pyplot as plt
import cv2
plt.rc('font',family='Youyuan',size='9')
plt.rc('axes',unicode_minus='False')
plt.title('matplot显示cv图片 by桔子code')
img = cv2.imread('lena.jpg') #opencv读取文件图片
print('type(img):',type(img))
plt.imshow(img) #imshow
plt.show()
从运行效果看,cv2读出的数据直接用matplotlib显示,会导致颜色错乱,原因是cv2读出的数据是按照BGR格式组织的,而matplotlib显示图像需要按照RGB格式组织,所以需要将读出的numpy数据进行转换:
import numpy as np
import matplotlib.pyplot as plt
import cv2
plt.rc('font',family='Youyuan',size='9')
plt.rc('axes',unicode_minus='False')
plt.title('matplot显示cv图片 by桔子code')
img = cv2.imread('lena.jpg') #opencv读取文件图片
print('type(img):',type(img))
print(img.shape)
img2=img.copy()
img2[:,:,2]=img[:,:,0]
img2[:,:,0]=img[:,:,2]
plt.imshow(img2) #imshow
plt.show()