在做深度学习目标检测和语义分割的训练时,会有读取图片这个模块流程,在读取图片时,有些人习惯使用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读取图片就已经是单通道灰度图了。