opencv-python 保存图像,以及解决图片无法保存的问题

情况1:图片路径全为英文

import cv2
# 读取图像
img = cv2.imread("./raw.jpg", 0) # 0: gray image;1: bgr 图像; -1: 图像原格式输出
# 保存图像
cv2.imwrite("./save.jpg", img)

情况2:路径不全为英文,路径中存在中文.

# 读文件, 这种方式能读取路径中含有中文的图像文件
def imread(path):
    # 将opencv打开的BGR格式图像转为RGB格式,以满足某些库比如face_recognition的使用需要
    # image_array = cv2.cvtColor(cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1), cv2.COLOR_BGR2RGB) 
    image_array = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1) 
    return image_array
 
# 存文件
def imsave(path, image):
    # image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    cv2.imencode('.jpg', image)[1].tofile(path) # .jpg, .png

若路径中存在中文,但用了情况1中的方法,如下图所示

test.py文件内容:

image.png

执行该文件不会有任何输出。不会报错,也不会生成“测试/test.jpg”。
image.png

若把中文路径改为英文:

image.png

也不会有任何输出,也不会报错。但还是没有该文件夹和图片。需要先创建图片目标存储路径的文件夹
如下:

import cv2
import os
img = cv2.imread('assets/bus.jpg')
os.makedirs('TEST', exist_ok=True) # 等同于 if not os.path.exists('TEST') : os.mkdirs('TEST')
cv2.imwrite('TEST/test.jpg', img)

这样就有了。


image.png

用opencv保存图片的总结、注意点

  1. 在当前文件夹下保存图片,若图片是中文名称,则用情况2方法;若图片是英文或数字名称,用情况1情况2方法都ok。
  2. 若有保存路径,先os.mkdirs(path)创建该路径,再根据路径和文件名中是否有中文选择使用情况1情况2的保存方法。

参考:
Opencv 为什么明明保存了图片却没有保存成功??Nova新星的博客-CSDN博客
opencv-python 读取和保存图像_runtao123的博客-CSDN博客_opencv python 保存图像

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容