情况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保存图片的总结、注意点
- 在当前文件夹下保存图片,若图片是中文名称,则用情况2方法;若图片是英文或数字名称,用情况1、情况2方法都ok。
- 若有保存路径,先os.mkdirs(path)创建该路径,再根据路径和文件名中是否有中文选择使用情况1和情况2的保存方法。
参考:
Opencv 为什么明明保存了图片却没有保存成功??Nova新星的博客-CSDN博客
opencv-python 读取和保存图像_runtao123的博客-CSDN博客_opencv python 保存图像