使用cv2、Image、plt打开、显示和保存图片
文章目录
- 使用cv2、Image、plt打开、显示和保存图片
- 0、读取图片
- 1、使用cv2显示cv2打开的图片
- 2、使用cv2显示Image打开的图片
- 3、使用Image显示Image打开的图片
- 4、使用Image显示cv2打开的图片
- 5、使用plt显示cv2打开的图片
- 6、使用plt显示Image格式的图片
- 7、使用plt显示多张图片
0、读取图片
import cv2
from PIL import Image
import matplotlib.pyplot as plt
image_read_cv2 = cv2.imread('./cat.jpg', cv2.IMREAD_COLOR) # 使用cv2打开图片
image_read_Image = Image.open('./cat.jpg') # 使用Image打开图片
print(image_read_cv2.shape)
使用cv2打开的图片格式是:(1440, 2560, 3) [h, w, c]
通道顺序是BGR
print(image_read_Image.size)
使用Image打开的图片格式是:(2560, 1440) [w, h]
通道顺序是RGB
提炼知识点:cv2格式图片和Image格式图片格式互转
# cv2格式图片和Image格式图片格式互转
# 1、cv2 --> Image
image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
# 2、Image --> cv2
image0 = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)
1、使用cv2显示cv2打开的图片
def cv2_show_cv_image(image): # 使用cv2显示cv2打开的图片
cv2.namedWindow('image', 0) # 命名一个窗口
cv2.resizeWindow('image', 600, 500) # 将窗口大小进行调整,这两部主要是为了防止图片过大,屏幕显示不下
cv2.imshow('image', image) # 显示图片
cv2.waitKey(0) # 等待,按任意键跳过,如果没有这个,窗口会是一闪而过
cv2.destroyWindow('image') # 这个和下一句都是关闭窗口,只不过这是关闭指定窗口
# cv2.destroyAllWindows() # 关闭此时cv2所有打开的窗口
# cv2.imwrite('cat.png', image) # cv2保存图片
2、使用cv2显示Image打开的图片
def cv2_show_Image_image(image):
image0 = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR) # 将Image格式的图片转成np进而转换成cv2格式
cv2.namedWindow('image', 0) # 命名一个窗口
cv2.resizeWindow('image', 600, 500) # 将窗口大小进行调整,这两部主要是为了防止图片过大,屏幕显示不下
cv2.imshow('image', image0) # 显示图片
cv2.waitKey(0) # 等待,按任意键跳过,如果没有这个,窗口会是一闪而过
cv2.destroyWindow('image') # 这个和下一句都是关闭窗口,只不过这是关闭指定窗口
3、使用Image显示Image打开的图片
def Image_show_Image_image(image:Image):
image.show()
# image.save('image.jpg') # 保存
一般在dataset中使用Image进行处理
# 这个操作主要是为了保证将图片进行缩放后,保持原图的纵横比不变
image = image.resize((new_w, new_h), Image.BICUBIC) # 对图片进行缩放
image_new = Image.new('F', size=(in_w, in_h), color=0) # 创建一个新的蒙版
image_new.paste(image, (dx, dy)) # 将原画图粘贴到新的蒙版上
4、使用Image显示cv2打开的图片
这个应用场景可以是dataset加载时使用cv2先对图片进行预处理,再转换成Image格式,
def Image_show_cv2_image(image:cv2):
image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) # 把图片从cv2格式转换成Image
image.show()
5、使用plt显示cv2打开的图片
# 使用plt显示cv2格式的图片
def plt_show_cv2_image(image):
image0 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.figure() # 打开一个画布
plt.axis('off') # 不打开坐标轴
plt.imshow(image0)
plt.show() # 加上这个才能显示
# plt.pause(0.01) # 暂时显示0.01秒
# plt.draw() # 重新绘制当前图形
6、使用plt显示Image格式的图片
# 使用plt显示Image格式的图片
def plt_show_Image_image(image:Image):
plt.figure()
plt.imshow(image)
plt.show()
7、使用plt显示多张图片
def plt_show_multi_image(image1, image2):
def plt_show_multi_image(image1, image2):
fig = plt.figure(num=1)
fig.tight_layout() # 调整整参数使子图填充整个区域,不会出现字体重叠
plt.subplot(121) # 定位到第一个子图
plt.imshow(image1) # 第一个字图需要显示的图片
plt.subplot(122)
plt.imshow(image2)
plt.show() # 把画布显示出来
使用plt绘制图之后使用
plt.savefig('cats.png')
保存图片