一、简述

本篇blog将介绍基于opencv库进行图片读取和保存的简要操作和需要注意的点。

二、图片读取

import cv2
img = cv2.imread(filename)
  • 默认情况下,是读取的彩色图片三通道。如果是灰色图片,也会返回三通道的值,但是三通道对应的位置的元素值是一样的。如果希望灰色图片返回的单通道数值,那么需要给定参数:flags=cv2.IMREAD_GRAYSCALE
  • 读取返回值是整数,一般范围在0-255

三、图片保存

import cv2
cv2.imwrite(filename,data)

经过测试,如果data是0-1范围内,需要变换到0-255范围之后再调用该函数,否则存储的图片颜色为全黑(data应为[H,W,C])。

补充:PyTorch中tensor数据矩阵保存为图片

import cv2
#data: [C,H,W] | 范围为[0,1] | cpu
cv2.imwrite(filename,np.transpose(data.numpy(),[1,2,0])*255)

四、不同读取图片的方法差异

Python读取图片的方法有很多,基于cv2、PIL、matplotlib等等。值得注意的是:基于cv2库的读取和基于PIL库的读取的返回数据在channel上刚好是相反的(如果是彩图三通道的话)。

下面是实验demo:

from PIL import Image  
    # img=cv2.imread('Images/House256rgb.png')
    img = np.asarray(Image.open('Images/House256rgb.png'))
    print(img)