数据可视化~matplotlib显示二维图像

原文链接:http://www.juzicode.com/archives/2514

matplotlib中显示二维图像不再使用plot()方法,而是有专用的api接口imshow(),接受二维数组和特定形状的三维数组,如果是三维数组第三维是3或者4,3正好对应rdb三通道彩色图像,4正好对应带alpha通道的彩色图像。

1、直接显示numpy类型

使用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()

2、显示matplotlib读取的图片

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): <class 'numpy.ndarray'>

用imread()读出的数据类型和前面例子中手动生成numpy类型数组效果一样 。

3、显示opencv读取的图片

用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()

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注