1、用PIL读取的图片不是numpy,用cv读取的图片就是numpy。
testPIL = Image.open(r"d:\Desktop\test1.jpeg")
testCV = cv2.imread(r"d:\Desktop\test1.jpeg")
2、可以将PIL读入的图片赋值给numpy:
testPIL_NP = np.array(testPIL)
如下所示,testPIL_NP和testCV一模一样,唯一不一样的地方是,testPIL_NP是RGB,而testCV是BGR。
3、当图像数据是numpy类型时,只能用cv2.imwrite保存,不能用PIL的save保存;当图像类型是PIL.Image类型时,只能用PIL的save保存,不能用cv2.imwrite。
4、cv2.imread 默认读入三通道数据,哪怕原图是单通道的,它也会复制三份变成三通道。
如何指定读入的通道数:
img_o = cv2.imread(r"d:\Desktop\test1.jpeg", -1) # 按原图的通道数,原图是几通道就读几通道
img_g = cv2.imread(r"d:\Desktop\test1.jpeg", 0) # 读入灰度图,单通道
img_c = cv2.imread(r"d:\Desktop\test1.jpeg", 1) # 读入彩色图,三通道
img_d = cv2.imread(r"d:\Desktop\test1.jpeg") # 没写参数,默认是1,读入彩色图,三通道
cv2.imwrite则不会默认三通道,当前numpy数据是几通道它就保存成几通道的。