最近在dataloader的时候,读取图片需要用到cv2 和PIL的转换,所以在读取图片的时候,发现了一些不同之处,感觉还挺绕的,mark一下。
cv2:
cv2.imread()
读取出来的直接是np的array.
img.shape = [h,w,c]
cv2.resize(size=(w,h))
此处的图像尺寸是有细微差别的,应该在官方的docs上是可以查到的:
height, width = img.shape[:2] res = cv.resize(img,(2 * width, 2 * height),
interpolation = cv.INTER_CUBIC)
PIL:
img = Image.open()
img = np.array(img),
需要多一步转化为np的array.
同时作为PIL的对象,
img.size=[w,h]
但是当转化为np后,
img.shape = [h,w,c]
在数组顺序上是与cv2相同的,但是在c的顺序上是有细微区别的:
cv2 -> PIL : BGR -> RGB
一些疑问
此外,PIL的resize是对图像划定部分进行裁剪,而不是像cv2一样进行插值,目前所知的可以像cv2一样对图像进行插值的就是torch的pooling操作。
有没有大神也可以指导一下其他可以实现等效resize的简单方法 :)