在使用cv.imread()
和cv.imwrite()
时报错
[ WARN:0@0.009] global loadsave.cpp:244 cv::findDecoder imread_('./begin\蒲公英.jpg'): can't open/read file: check file path/integrity
Traceback (most recent call last):
File "E:\Software Data\BaiduNetdiskDownload\8类图像扩充代码\8类图像扩充代码\png_jpg.py", line 23, in <module>
cv.imwrite(new_path + '\\' + portion[0] + '.jpg', src)
cv2.error: OpenCV(4.7.0) D:\bld\libopencv_1675730119851\work\modules\imgcodecs\src\loadsave.cpp:783: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'
报错信息提示:“cv::findDecoder imread_('./begin./中文名称/.jpeg'): can't open/read file: check file path”
,这表明OpenCV的图像解码器无法打开或读取指定路径下的JPEG图像文件。
解决方法:文件名不要出现中文字符
最初以为输入的图片过大出现错误,
我输入的图片是4320*3240大小的JPEG图像,3.18MB
文件名是“蒲公英.jpeg”
查找资料没有相关的文件大小限制:
- 文件路径错误:指定的路径不正确,可能是路径中的文件名包含了特殊字符或者格式不正确。
- 文件不存在:指定路径下的文件不存在。
- 文件损坏:图像文件可能损坏无法读取。
- 权限问题:没有足够的权限去读取文件。
解决方法:
- 检查文件路径:确保提供给imread函数的路径是正确的,并且文件名正确无误。如果路径以’./'开头,表示文件应该在当前目录下。
- 检查文件存在性:确认文件确实存在于指定的目录中。
- 检查文件损坏:尝试在其他图片查看器中打开该文件,确认文件未损坏。
- 检查权限:确保运行程序的用户有权限访问该文件。
最终发现:
cv.imread
函数在 OpenCV 中用于读取图像,但默认情况下它不支持直接读取包含中文名的图像。如果需要读取包含中文名的图像,你需要确保文件路径是正确编码的,通常使用 UTF-8
编码。
同样的cv.imwrite
函数也是不支持中文字符的。
如果必须要处理带中文字符的图像呢(像我一样,数据集里的图像全是中文命名的555~)
使用cv2读写带有中文的名称的图像
1. cv2.read()
先用np.fromfile()
读取为np.unit8格式,再使用cv2.imdecode()
解码
filepath 表示 要读取图片的路径
将
image = cv2.imread(filepath)
改为
image = cv.imdecode(np.fromfile(filepath, dtype=np.uint8), -1)
2. cv2.write()
用cv2.imencode()
将 image 编码为 jpg 输出到 new_path
new_path 表示 转换完成后放置的图像路径
将
cv.imwrite(new_path, image)
改成
cv2.imencode('.jpg', image)[1].tofile(new_path)