一、cv2.imdecode 替代 cv2.imread 实现图片的读取, 解决了 cv2.imread 不支持中文路径的问题。
img = cv2.imread(os.path.join(imgPath,input))
img2 = cv2.imdecode(np.fromfile(imgPath,dtype=np.uint8),cv2.IMREAD_COLOR)
print ("\nResult : ", np.array_equal(img, img2)) # 判断两个numpy数组每个元素是否相等
# 以上是说明,完全可以用 cv2.imdecode 替代 cv2.imread 实现图片的读取,读取的格式都是 numpy数组,
而且 cv2.imdecode 解决了 cv2.imread 不支持中文路径的问题。
二、通道数查看
img = cv2.imdecode(np.fromfile(os.path.join("E:/卷绕/datasets",input),dtype=np.uint8),cv2.IMREAD_GRAYSCALE)
if img.ndim == 2: #2维度表示长宽
channels = 1 #单通道(grayscale)
print("channels = 1:",channels)
elif img.ndim == 3:
channels = img.shape[-1] #第三维度表示通道,应为3
if(channels != 3): #应该是三才对
print("异常维度,应该是三,才对")
else:#异常维度,不是图片了
print("异常维度,不是图片了")
print("channels = :",channels)
三、numpy与Image互转
from PIL import Image
import numpy as np
im = Image.open("/home/lw/a.jpg")
im.show()
img = np.array(im) # image类 转 numpy
img = img[:,:,0] #第1通道
im=Image.fromarray(img) # numpy 转 image类
im.show()