opencv和PIL读取图片的一个细节

在做深度学习目标检测和语义分割的训练时,会有读取图片这个模块流程,在读取图片时,有些人习惯使用opencv,有些人习惯使用PIL。在做语义分割时,需要读取图片和标签mask,而标签mask也是一幅图片,而在读取了标签mask后,会把它转成灰度图,图片中的像素值表示类别索引。然而用opencv和PIL读取图片时,是有差别的。看如下代码示例:

import numpy as np
from PIL import Image
import cv2
if __name__ == "__main__":
    cvimg = cv2.imread('mask.png')
    pilimg = Image.open('mask.png')
    pilimg = np.array(pilimg)
    print(cvimg.shape)
    print(pilimg.shape)

运行结果是:

(498, 652, 3)
(498, 652)

可以看到,用opencv读取图片后,图片是3通道的,这时候需要执行 cvimg = cv2.cvtColor(cvimg, cv2.COLOR_BGR2GRAY)才能转换成单通道灰度图。而用PIL读取图片就已经是单通道灰度图了。

猜你喜欢

转载自blog.csdn.net/nihate/article/details/107580649
今日推荐