使用cv2、Image、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') 保存图片

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐