You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下Python调用cv2.imwrite写图报权限被拒绝错误

问题描述

执行图像切分代码,目标是将原图拆分为若干个10*10像素的图块,写入第一张名为P1的图像后持续触发写入报错。

原实现代码
num = 1
for i in range (0,rows-11,10):
    for j in range (0,cols-11,10):
       box = img[i:i+10,j:j+10]
       image_label = 'P' + str(num)
       cv2.imwrite(image_label+'.jpg', box)
运行报错信息

[ WARN:0@26028.025] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (773) cv::imwrite_ imwrite_('P1.jpg'): can't open file for writing: permission denied
报错翻译:写入P1.jpg时无法打开文件执行写操作,权限被拒绝

问题排查与修复
  • 首要原因:脚本运行的当前工作目录无写入权限。OpenCV默认把输出文件存在脚本启动时的工作目录,如果该目录是系统受保护路径(比如C盘根目录、Program Files目录),就会触发权限拒绝。
    修复方法:指定有完整读写权限的自定义目录作为输出路径,不要直接写入默认工作目录,参考实现:
    import os
    import cv2
    
    # 替换为你自己的非系统保护目录路径
    output_path = "D:/image_cut_tiles"
    # 自动创建输出目录,已存在时不报错
    os.makedirs(output_path, exist_ok=True)
    
    num = 1
    for i in range(0, rows-11, 10):
        for j in range(0, cols-11, 10):
            box = img[i:i+10, j:j+10]
            save_name = f"P{num}.jpg"
            # 拼接完整保存路径
            full_save_path = os.path.join(output_path, save_name)
            cv2.imwrite(full_save_path, box)
            num += 1
    
  • 隐藏逻辑错误:原代码没有对计数变量num做自增,所有循环迭代都会尝试写入同一个P1.jpg。如果第一次写入后文件被图片查看器、系统预览功能锁定占用,后续重复写入同一个文件也会抛出权限类错误,上述修复代码已补上num += 1的自增逻辑。
  • 补充排查项:如果调整路径、补全自增逻辑后仍报错,检查是否有其他程序正在打开占用已生成的P1.jpg,关闭占用程序后再运行即可。

内容的提问来源于stack exchange,提问作者Amir Mohseni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:01:04