一、简述
本篇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)