opencv的imread()函数在windows上不能读取中文路径文件原因说明

这个问题在Linux上是不存在的。问题是由于Windows和python3的编码不兼容引起的,因为windows系统的编码默认为GBK,python3解释器处理字符串编码是Unicode(无法修改,修改源文件的文本编码类型不影响这个解释器处理字符串使用的编码),最后,opencv的文件操作函数没有对编码进行转换,是一种输入什么输出就是什么的直来直去方法,这就造成了混乱,opencv接收到了python3发来的Unicode编码字符串直接传递给系统,系统就会把字符串当作GBK编码来理解,所以使用imwrite()函数保存带中文名字的图片会乱码,使用imread()函数读取中文路径会读取失败。鉴于两家在这个问题上都比较“轴”,所以这个问题现在没有优雅的解决方法。有几种不怎么完美的解决方法如下:

  1. 使用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('中文路径')
  1. 更改windows系统的编码类型,这方法正常情况下是不可取的,系统的编码改变后会使之前使用GBK编码的软件和文件乱码。如果是一台专门运行一个软件额电脑,可以考虑使用。
    在这里插入图片描述
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值