这个问题在Linux上是不存在的。问题是由于Windows和python3的编码不兼容引起的,因为windows系统的编码默认为GBK,python3解释器处理字符串编码是Unicode(无法修改,修改源文件的文本编码类型不影响这个解释器处理字符串使用的编码),最后,opencv的文件操作函数没有对编码进行转换,是一种输入什么输出就是什么的直来直去方法,这就造成了混乱,opencv接收到了python3发来的Unicode编码字符串直接传递给系统,系统就会把字符串当作GBK编码来理解,所以使用imwrite()函数保存带中文名字的图片会乱码,使用imread()函数读取中文路径会读取失败。鉴于两家在这个问题上都比较“轴”,所以这个问题现在没有优雅的解决方法。有几种不怎么完美的解决方法如下:
- 使用numpy读取文件
# ### 读取图片
def imread_ind(impath):
# 注意dtype根据图片的数据类型正确设定
img = cv.imdecode(np.fromfile('impath', dtype=np.uint8), cv.IMREAD_COLOR)
return img
# ### 保存图片
cv.imencode(".jpg", img)[1].tofile('中文路径')
- 更改windows系统的编码类型,这方法正常情况下是不可取的,系统的编码改变后会使之前使用GBK编码的软件和文件乱码。如果是一台专门运行一个软件额电脑,可以考虑使用。