今天在使用OpenCV和PIL分别将一个numpy.ndarray保存为图片时,发现红蓝颜色竟然颠倒了,代码如下:
cv2.imwrite("im_CV.jpg", image)
im = Image.fromarray(image)
im.save("im_PIL.jpg")
im_CV | im_PIL |
后来发现,OpenCV使用的是BGR模式,而PIL使用的是RGB模式。在OpenCV看来(0,0,255)对应的是(B,G,R)也就是显示红色,而在PIL看来,(0,0,255)对应的是(R,G,B)显示为蓝色,疑问终于解开。
另外,在找问题时发现一个帖子,https://www.it1352.com/1701819.html,上面说使用cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)进行通道转换后,它只是在顺序之间切换,显示效果一样,不影响着色。
我并不认同,做了一点测试,结果如下:
cv2.imshow("im_cv", image)
im_pil = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.imshow("im_PIL", im_pil)
初学者,可能有理解有误的地方,希望批评指正,谢谢。