1.简介
最近使用OpenCV读取影像时,发现读取到的Mask为None,搜寻后发现是编码问题导致的读取中文路径下的图片失败。之前一直习惯将代码和数据保存在英文路径下,以为OpenCV的cv2.imread能够支持各种路径和格式的图片读取,今天发现了就浅浅记录一下。
2.方法:使用cv2.imdecode函数
简单的一行代码就能解决这个问题,很优雅⭐_⭐
import cv2
import numpy as np
img = cv2.imdecode(np.fromfile("中文路径/图片.jpg",dtype=np.uint8),-1)
3.代码解释
使用了Python中的OpenCV库(cv2),NumPy库(np)和文件I/O操作,具体解释如下:
-
np.fromfile("中文路径/图片.jpg", dtype=np.uint8)
: 这一部分使用NumPy的fromfile
函数从文件中读取数据,并将其转换为NumPy数组。其中,"中文路径/图片.jpg"是文件的路径,dtype=np.uint8
表示将数据类型设定为无符号8位整数,即每个像素值占一个字节。 -
cv2.imdecode(...)
: 这是OpenCV中的一个函数,用于解码图像文件并将其转换为图像矩阵。在这里,它接收NumPy数组作为输入参数,这个数组包含了从文件中读取的图像数据。 -
-1
: 这个参数表示图像加载标志。在这种情况下,-1表示将图像加载为原始图像,包括alpha通道(如果存在),即读取到的img与原始影像的通道数相同。