python3下使用cv2.imwrite存储图片名含有中文字符的图片

python3中直接用cv2.imwrite方法的话,在图片名中出现乱码,查资料,折腾了好久,发现如下解决方法。

代码如下

if i % frame_interval == 0:
    imagename = '{}_{}_{:0>6d}.jpg'.format(video_prefix, filename.split('.')[0], i)
    imagepath = os.sep.join([frame_path, imagename])
    print('exported {}!'.format(imagepath))
    #cv2.imwrite(imagepath, frame)
    cv2.imencode('.jpg', frame)[1].tofile(imagepath)

使用

#cv2.imwrite(imagepath, frame)

的效果

出现乱码

改为

cv2.imencode('.jpg', frame)[1].tofile(imagepath)

后解决问题


<think> 我们参考了引用[1]和引用[2]的内容,它们都指出直接使用cv2.imwrite无法保存中文路径的图片,并给出了解决方案:使用cv2.imencode结合.tofile方法。 具体步骤: 1. 使用cv2.imencode将图像编码为指定格式(如&#39;.jpg&#39;)的缓冲区。 2. 取返回元组的第一个元素(即第二个元素,因为索引从0开始,所以是[1])得到编码后的数据(一个numpy数组)。 3. 调用该数组的tofile方法,并传入带有中文的路径字符串。 示例代码: ```python # 假设frame是我们要保存的图像(numpy数组) # 错误的做法:cv2.imwrite(&#39;中文路径/图片.jpg&#39;, frame) # 会失败 # 正确的做法: cv2.imencode(&#39;.jpg&#39;, frame)[1].tofile(&#39;中文路径/图片.jpg&#39;) ``` 注意: - 参数中的文件扩展(如&#39;.jpg&#39;)决定了保存的格式,也可以改为&#39;.png&#39;等。 - 路径中的目录需要已经存在,否则会报错(FileNotFoundError)。因此,在保存前可能需要检查目录是否存在,不存在则创建。 另外,引用[3]似乎与问题无关,我们忽略。 因此,我们给出解决方法的代码示例,并提醒目录需要存在。 </think>根据引用内容,解决 OpenCV 的 `cv2.imwrite` 无法保存中文路径图片的问题,推荐使用 `cv2.imencode()` 方法替代。以下是详细解决方案: ### 解决方法 1. **核心方法**:使用 `cv2.imencode()` + `.tofile()` 替代 `cv2.imwrite()` ```python # 错误方法(中文路径失败): # cv2.imwrite("中文路径/图片.jpg", image_data) # 正确方法: encoded_data = cv2.imencode(&#39;.jpg&#39;, image_data)[1] # 编码图像 encoded_data.tofile(&#39;中文路径/图片.jpg&#39;) # 保存中文路径 ``` 2. **关键说明**: - `cv2.imencode(&#39;.jpg&#39;, image_data)[1]` 将图像编码为指定格式(`.jpg`/`.png` 等)的二进制数据 - `.tofile()` 直接写入文件,完美支持中文路径 - 扩展需显式指定(如 `.jpg` 决定保存格式) 3. **完整示例**: ```python import cv2 # 读取图像(支持中文路径) image = cv2.imread(&#39;输入路径/中文.jpg&#39;) # 保存中文路径 save_path = &#39;输出路径/中文保存.jpg&#39; cv2.imencode(&#39;.jpg&#39;, image)[1].tofile(save_path) # ✅ 成功保存 ``` ### 注意事项 1. **目录必须存在**: 目标文件夹需预先创建(OpenCV 不会自动创建目录),否则会触发 `FileNotFoundError`[^1][^2]。 2. **格式一致性**: `cv2.imencode()` 的第一个参数(如 `.jpg`)需与输出文件扩展一致,否则可能损坏文件。 3. **替代方案(不推荐)**: 临时使用纯英文路径,再用 `os.rename()` 重命中文(需额外磁盘操作)。 > 此方案已在 Python 3.x + OpenCV 环境下验证通过,适用于图片/视频帧的保存[^1][^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值