cv2、plt 、PIL显示图像

opencv库/cv2

img = cv2.imread(img_path) #读入一张图片,返回一个(H,W,C)的ndarray
cv2.imshow(name,img)	#显示一张图片
cv2.waitKey()		#必须加上,不然图片无法显示
cv2.destroyAllWindows()	#执行键盘动作后关闭窗口

1.cv2.imread()返回一个ndarray

补充 :ndarray即矩阵类型,由np.array(…)创建

arr1 = np.array([[1,2,3],[1,2,4],[1,2,5]])
print(type(arr1))
>>> <class 'numpy.ndarray'>
print(arr1[0])
>>>[1 2 3]

可查看返回ndarray的维数

img = cv2.imread(img_path)
print(img)
print(type(img))
print(img.shape)
>>> <class 'numpy.ndarray'>
>>>(550, 550, 3)	#此处实为550x 550x3

2.cv2.split(img) 函数将3通道图片分割,返回三个矩阵。
因为cv2.imread是以bgr模式读取的,此时的三个通道对应b,g,r。
cv2.merge([c1,c2,c3]) 进行通道合并,可将其转换为rgb模式,用于plt的读取
或者使用img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 直接转换

img = cv2.imread(img_path)
b,g,r = cv2.split(img)		#通道拆分:切分成b,g,r三个通道
img_rgb = cv2.merge([r,g,b])	#通道合并:转化为rgb三个通道
#img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 也可以

3.显示图片一定不要忘了加
cv2.waitKey()
cv2.destroyAllWindows()

4.cv2.cvtColor(a1,a2) 颜色空间转换函数
a1为要进行操作的img,a2为转换格式
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)

故将灰度图像转化为三通道图像(如mnist)可用

train_image = [cv2.cvtColor(cv2.resize(img,(image_size,image_size)),cv2.COLOR_GRAY2BGR) for img in x_train]

PIL+plt/pylab

import os
from PIL import Image 
import matplotlib.pyplot as plt

img = Image.open(img_path)	#返回一个PIL图像对象
print(type(img))
>>> <class 'PIL.JpegImagePlugin.JpegImageFile'>
print(img)
>>> <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=600x600 at 0x17C6F4F44E0>


import pylab
arr_img = pylab.array(img)	#使用pylab中的array函数可将PIL图像转化为矩阵
print(type(arr_img))
>>> <class 'numpy.ndarray'>

20191025补充
PIL的Image函数导入的图片为JpegImageFile格式,没有shape属性,
需要使用np.array(image)转化为数组
可得到图片的数组表示(H,W,C)

from PIL import Image
import numpy as np

image = Image.open('bird.jpg')
image = np.array(image)
print(image.shape)
>>>(1200,800,3)

cv2、plt 、PIL显示图像_第1张图片

此处是一个,plt和cv2导入图片的比较

img1 = Image.open(img_path)
arr_img1 = pylab.array(img1)
img2 = cv2.imread(img_path)
print(arr_img1.shape)
>>>(600, 600, 3)
print(img2.shape)
>>>(600, 600, 3)
plt.figure('rabbit')
plt.imshow(img)
plt.axis('off') # 关掉坐标轴为 off
plt.title('image') # 图像题目
plt.show()

1 plt.figure() 函数用于创建一个图像
此处用于显示图片的话可以不定义参数或者定义图像名
cv2、plt 、PIL显示图像_第2张图片
2.plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示。

其后跟着plt.show()才能显示出来。

plt.figure()
plt.imshow(img)
plt.show()

反正就,这三个都写上,肯定是没问题的,但在实验中,只写plt.imshow()也可以显示图片
cv2、plt 、PIL显示图像_第3张图片
3.
plt.axis(‘off’) # 关掉坐标轴为 off
plt.title(‘image’) # 图像题目
cv2、plt 、PIL显示图像_第4张图片
4.绘图

plt.imshow(img)	#创建画布--一个图像

x = [100,100,400,400]
y = [200,500,200,500]
plt.plot(x,y,'r*')	#绘制红色 星形点
plt.plot(x[:2],y[:2])	#绘制连接前两个点的线
plt.show()	#显示图像

你可能感兴趣的:(cv2、plt 、PIL显示图像)