解决python cv2.imread 读取中文路径的图片返回为None的问题


Posted in Python onJune 02, 2020

使用cv2读取图片时,输出图片形状大小时出现报错“ 'NoneType' object has no attribute shape”,后来排查发现读取图片的返回值image为None, 这就说明图片根本就没有被读取。

下面图片是问题问题解决后,为了更好的展示,写的代码展示,这是正常的因果关系,找错误排查时是从下往上推。

解决python cv2.imread 读取中文路径的图片返回为None的问题

使用PIL读取图像,能够成功读取图片,借此了解图片的大小和格式,代码如下图所示:

解决python cv2.imread 读取中文路径的图片返回为None的问题

cv.imread函数能够成功读取非中文路径的图片,所以就想到是不是中文路径的问题,opencv中opencv不接受non-ascii的路径,解决方法就是先用先用np.fromfile()读取为np.uint8格式,再使用cv2.imdecode()解码,如下:

解决python cv2.imread 读取中文路径的图片返回为None的问题

np.fromfile(filename, dtype)是从以dtype形式读取文件

cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像

补充知识:python3.x, cv2.imread()导入图片失败,none

首先在第一次运行时,命令行中错误:

ValueError: embedded null character

发现是因为导入的图片路径中存在\0

python3.x, cv2.imread()导入图片失败,none

1. 路径中无中文名

2. pip list 发现也有opencv-python,(虽然我又重新下了一遍

而这些图片用PS打开的时候,会报错:无法完成请求,因为找到不知名的或无效的JPEG标识符类型

图片是我从网站上爬下来的,改过其后缀名为jpg, 源图真正的后缀名是gif.

所以要重置一些文件的格式,比如用画图重新保存为jpg格式。

这里注意:

后缀是一个标签,表明文件的类型和格式,至于文件到底是不是该格式就另说了。有时候改了后缀名,文件仍能被打开(我遇到的情况),是因为文件内容还有文件头,有些应用程序会根据文件头中的信息来判断文件的格式(比如windows自带的照片查看器)而不是通过后缀名。所以切实有效的方式还是通过格式转换软件来转换格式。

应用python PIL包的Image模块将图片重新转换格式为jpg(彻底转换格式,而不是只改后缀)

(当然如果只需要几张图的话,直接用画图打开另存jpg格式就好了)

img = Image.open(file_path+'/'+files[j]).convert('RGB')
img.save(file_path+'/'+files[j]

注意要有个convert('RGB'),不然报错OSError: cannot write mode P as JPEG

以上这篇解决python cv2.imread 读取中文路径的图片返回为None的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python里对list中的整数求平均并排序
Sep 12 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
Python异常处理操作实例详解
Aug 28 Python
对python 判断数字是否小于0的方法详解
Jan 26 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
python 遗传算法求函数极值的实现代码
Feb 11 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
Python类class参数self原理解析
Nov 19 Python
python 利用 PIL 将数组值转成图片的实现
Apr 12 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 Python
Python中tqdm的使用和例子
Sep 23 Python
Pandas读取csv时如何设置列名
Jun 02 #Python
python os模块常用的29种方法使用详解
Jun 02 #Python
完美解决pycharm 不显示代码提示问题
Jun 02 #Python
PyQt5.6+pycharm配置以及pyinstaller生成exe(小白教程)
Jun 02 #Python
基于python实现查询ip地址来源
Jun 02 #Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 #Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 #Python
You might like
PHP4 与 MySQL 数据库操作函数详解
2006/12/06 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php绘制一条直线的方法
2015/01/24 PHP
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
实现微信小程序的wxml文件和wxss文件在webstrom的支持
2017/06/12 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python import自定义模块方法
2015/02/12 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
在Python中处理时间之clock()方法的使用
2015/05/22 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python排序算法实例代码
2017/08/10 Python
matplotlib作图添加表格实例代码
2018/01/23 Python
Python Requests库基本用法示例
2018/08/20 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
python中wheel的用法整理
2020/06/15 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
新驾驶员个人自我评价
2014/01/03 职场文书
化工操作工岗位职责
2014/04/29 职场文书
推荐信格式范文
2014/05/09 职场文书
党员争先创优承诺书
2015/01/20 职场文书
上甘岭观后感
2015/06/10 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang