用OpenCV的imread读取图片,如果图片路径有中文,读取会失败。这个问题只会在Python中出现,在C++中不会出现。
这个问题也很好避免,因为OpenCV可以直接从内存读入图片,所以只需要把含有中文路径的图片先读入内存,然后在OpenCV从内存中读入图片就行。 恰好numpy这个库,可以把中文路径下的文件读取到内存。
我写了一个python方法,用这个方法可以替换OpenCV读取图片的imread
def load_pic(filename: str, mode) -> np.ndarray:
raw_data = np.fromfile(filename, dtype=np.uint8) # 先用numpy把图片文件存入内存:raw_data,把图片数据看做是纯字节数据
img = cv2.imdecode(raw_data, mode) # 从内存数据读入图片
return img