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
相关产品推荐
相关产品推荐

