1 解决opencv-python使用cv2.imread()读取中文路径图片失败的问题

在深度学习的项目中,经常会处理图片数据集,经常会面临读取中文路径下的图片文件的问题,一般情况下我们会使用以下代码读取图片数据,

import cv2

def read_image(img_path):
    img = cv2.imread(img_path)
    return img

if __name__ == '__main__':
    image_path = 'E:\\猫狗数据集\\1.png'
    img = read_image(image_path)

上述代码对于不包含中文路径的图片数据是可行的,但是对于中文路径的图片数据读取会出现结果数据为空的情况,以至于后续的一系列图片操作例如resize等会出现错误,比如!ssize.empty() in function 'cv::resize'的这种错误。至于中文路径下的图片读取失败的原因一般是由于字符编码的问题,对于这种问题,我们可以使用以下方式读取中文路径图片。

import cv2
import numpy as np

def read_image(img_path):
    img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), cv2.IMREAD_COLOR)
    return img

if __name__ == '__main__':
    image_path = 'E:\\猫狗数据集\\1.png'
    img = read_image(image_path)

现在数据读取到numpy数组中,而np.fromfile可从中文路径中读取数据,然后再使用cv2.imdecode从内存中读取图像数据。