cv2.imread()与PIL中Image.open(),以及相互转换

https://www.cnblogs.com/chen-hw/p/11693806.html

对于Image.open()函数默认真彩图像读取通道顺序为RGB,而cv2.imread()则是BGR。同时,当图像格式为RGBA时,Image.open(‘---.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread('---.jpg')读取的格式是BGR,只有三个通道。

Image 对象和 numpy 可以互相转换。但是要注意,对于同一张图片, 两种方式读取得到的数据,可能存在差异。

使用以下代码发现, 当图片是png格式,读取结果是一致的;当图片是jpg格式时,读取结果是不一致的。这可能是因为Image.open 与 cv2.imread 在解码jpg时运算有差异。 

img_name = '/home/szh/pictures/1.png'
img_pil = Image.open(img_name).convert('RGB')
img_pil = np.asarray(img_pil)

cv2_img = cv2.imread(img_name, cv2.IMREAD_COLOR)
cv2_img = cv2.cvtColor(cv2_img, cv2.COLOR_BGR2RGB)
diff = cv2.absdiff(cv2_img, img_pil)
cv2.imshow('cv2_img', cv2_img)
cv2.imshow('diff', diff)
cv2.waitKey()



posted on 2020-01-09 09:49  兔子二  阅读(2855)  评论(0编辑  收藏  举报

导航