项目场景:
使用Python opencv库读入图片,但是显示读入的图片为None:
项目代码如下:
if file_path_name:
img = cv2.imread(file_path_name)
if img is None:
print(f"Failed to load image: {file_path_name}")
问题描述
以上做法发现图片无法读出,打印出日志如下:
[ WARN:0@11.349] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('D:美丽心灵.jpg'): can't open/read file: check file path/integrity
原因分析:
经过搜索,opencv无法读入图片的可能问题如下:
1.图片文件损坏
2.图片格式不支持
但是这里看到日志,我看到Decoder脑子里灵光一闪,会不会是Opencv库不支持中文字符,查证如下:
OpenCV 库是一个计算机视觉库,它是使用 C++ 编写的,因此,它需要在代码中使用 C++ 字符串来表示文件路径。
C++ 字符串默认采用 ASCII 编码,不支持中文字符,因此,当你传入一个包含中文字符的路径时,它可能会出现编码错误或无法找到文件的问题。
经过验证,确实如此
解决思路
- 将所有路径的英文改为中文,亲测有效
- 如果文件过多,不想一个一个改,或者写代码花费精力,可以尝试以下代码
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img