OpenCV 中文路径问题
在使用Python3 + OpenCV时,遇到读取/写出中文路径的图片,在使用时会遇到报错的问题。通过一个小函数即可解决,转载自知乎 冰不语 的回答,侵删。
OpenCV 中文路径问题
1 问题描述
我在Python3环境下使用OpenCV(cv2)处理图片,通过imread
读取并通过imshow
显示时,会出现报错,
1 | img = cv2.imread(curimg_path) |
执行时,提示Assertion failed的报错:
1 | File "d:\Codes\ForestrySecurity\DataPreprocessing\insects500.py", line 28, in main |
那img
的size
的宽、高到底有没有问题呢?
事实上,我尝试输出图片尺寸img.shape
:
1 | print("image shape: shape{0}".format(img.shape)) |
结果还是报错:
1 | File "d:\Codes\ForestrySecurity\DataPreprocessing\insects500.py", line 26, in main |
报错信息显示,img
对象成了NoneType
目标,显然,img
对象的读取出现了问题,即,问题定位在imread
环节。
2 解决方案
2.1 imread
经过搜索和调试验证,我发现通过一个小函数即可解决,转载自知乎 冰不语 的回答,侵删。
1 | def cv_imread(file_path): |
通过numpy读取文件,再编码为cv2的图片对象,避免了OpenCV不支持中文路径的问题。
调用时,替换cv2.imread
即可:
1 | # img = cv2.imread(curimg_path) |
2.2 imwrite
同样地,图片输出到含有中文的路径也需要使用一个小函数:
1 | def cv_imwrite(img, path): |
调用时,替换cv2.imwrite
即可:
1 | # cv2.imwrite(path, img) |
3 链接
关于该问题的知乎讨论:
OpenCV官方文档:
Python版OpenCV的中文教程,方便易读: