【错误记录】cv::findDecoder imread_(‘./begin\蒲公英.jepg‘): can‘t open/read file: check file path/integrity

在使用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”
蒲公英.jpg
查找资料没有相关的文件大小限制:

  • 文件路径错误:指定的路径不正确,可能是路径中的文件名包含了特殊字符或者格式不正确。
  • 文件不存在:指定路径下的文件不存在。
  • 文件损坏:图像文件可能损坏无法读取。
  • 权限问题:没有足够的权限去读取文件。

解决方法:

  • 检查文件路径:确保提供给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)
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值