当前位置:   article > 正文

opencv读写路径包含中文的文件

opencv读写路径包含中文的文件

读文件      

opencv直接读写路径包含中文的文件会出错。这是因为 cv2.imread 内部处理文件路径时,默认使用的是 C++ 标准库中的字符串处理函数,这些函数对于非 ASCII 字符可能处理不当,导致无法正确读取文件。        

1、使用 numpy.fromfile 读取文件内容,可以绕过文件路径的编码问题。numpy.fromfile 方法直接从文件系统中读取原始的字节流,并将其存储在一个 numpy 数组中。这样就避免了文件路径编码的问题。

2、使用cv2.imdecode 方法从内存中的字节流解码图像数据。将 numpy.fromfile 读取的字节流传递给 cv2.imdecode,它能够正确地解析这些字节数据并生成图像矩阵。

  1. import cv2
  2. import numpy as np
  3. # 文件路径包含中文字符
  4. file_path = '路径包含中文字符的图像文件.jpg'
  5. # 使用 numpy 从文件中读取字节流
  6. file_bytes = np.fromfile(file_path, dtype=np.uint8)
  7. # 使用 OpenCV 从字节流中解码图像
  8. img = cv2.imdecode(file_bytes, -1)
  9. # 显示图像
  10. cv2.imshow('image', img)
  11. cv2.waitKey(0)
  12. cv2.destroyAllWindows()

 简化代码:

 img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)

 写文件

同样的原理,逆操作,先将图像数据编码成numpy数组,再将其存为文件

  1. import cv2
  2. import numpy as np
  3. # 文件路径包含中文字符
  4. file_path = '路径包含中文字符的图像文件.jpg'
  5. # 使用 numpy 从文件中读取字节流
  6. file_bytes = np.fromfile(file_path, dtype=np.uint8)
  7. # 使用 OpenCV 从字节流中解码图像
  8. img = cv2.imdecode(file_bytes, -1)
  9. write_bytes = cv2.imencode('.jpg', img)[1]
  10. write_bytes.tofile('路径包含中文字符的图像文件2.jpg')
  11. # 显示图像
  12. cv2.imshow('image', img)
  13. cv2.waitKey(0)
  14. cv2.destroyAllWindows()

简化代码:

cv2.imencode('.jpg', orig_img)[1].tofile(file_path)

参考链接:OpenCV中读取中文路径、窗口命名中文、图片加中文乱码问题汇总-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/864727
推荐阅读
相关标签
  

闽ICP备14008679号