问题描述
1.使用opencv中的cv2.imread读取中文名称图片报错:
[ WARN:0@0.028] global loadsave.cpp:248 cv::findDecoder imread_(‘邓紫棋.jpg’): can’t open/read file: check file path/integrity
Traceback (most recent call last):
File “D:\MyTest\TestFiles\test1.py”, line 6, in
cv2.imshow(‘test’,img)
cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:971: error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow’
运行代码如下:
# coding:utf-8 import cv2 img = cv2.imread('邓紫棋.jpg') cv2.imshow('test',img) cv2.waitKey(0)
2.使用opencv中的cv2.imwrite无法保存中文名称图片
cv2.imwrite('邓紫棋2.jpg',img) # 运行后,没有显示保存文件,也没有报错
运行代码后,没有保存图片文件,也没有报错。
解决办法:使用cv2.imdecode与cv2.imencode
读取中文名图片:cv2.imdecode
使用cv2.imdecode进行图片读取,代码如下:
# coding:utf-8 import cv2 import numpy as np # img = cv2.imread('邓紫棋.jpg') img = cv2.imdecode(np.fromfile('邓紫棋.jpg', dtype=np.uint8), cv2.IMREAD_COLOR) cv2.imshow('test',img) cv2.waitKey(0)
运行后可以正常显示:
保存中文名图片:cv2.imencode
# coding:utf-8 import cv2 import numpy as np # img = cv2.imread('邓紫棋.jpg') img = cv2.imdecode(np.fromfile('邓紫棋.jpg', dtype=np.uint8), cv2.IMREAD_COLOR) cv2.imencode('.jpg',img)[1].tofile('邓紫棋2.jpg')
其中:'.jpg’表示把当前图片img按照jpg格式编码。
运行后可以正常保存。