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

使用OpenCV遍历图片报错:无法打开/读取文件,求解决方案

问题解决

核心错误:文件路径不完整

os.listdir(path)返回的只是文件夹里的文件名(比如001.jpg),而cv2.imread()默认在当前脚本的工作目录找文件,不是你指定的path目录,所以找不到文件。解决方法是把path和文件名拼接成完整路径:

img = cv2.imread(os.path.join(path, file))

其他代码问题修正

  • 缩进错误:内层的for i循环缩进不对,要和外层for file的代码块对齐
  • 颜色转换参数写错:cv2.cvt.COLOR_BGR2GRAY应该是cv2.COLOR_BGR2GRAY,而且你转换灰度后没有把结果赋值给变量,等于白转了。另外要注意:转灰度后图片是单通道(形状为(H,W)),但你后面patchify用的是(512,512,3)(3通道),会直接报错。如果要处理灰度图,把patchify的参数改成(512,512);如果要保留彩色图,就去掉灰度转换那行。
  • 保存文件名重复:你现在固定用000作为前缀,所有图片的patch都会重名覆盖,应该用原文件名的前缀(比如从001.jpg提取001)
  • 异常处理缩进:raise Exception要和if not cv2.imwrite对齐,属于同一个代码块

修正后的完整代码

import os
import cv2
import numpy as np
import patchify

path = 'C:/Users/j.brandstaeter/Desktop/Masterarbeit/graz/original_test/'
save_path = 'C:/Users/j.brandstaeter/Desktop/Masterarbeit/graz/patches/images/'

# 确保保存目录存在,不存在就创建
os.makedirs(save_path, exist_ok=True)

files = os.listdir(path)

for file in files :
    # 拼接完整文件路径
    full_file_path = os.path.join(path, file)
    # 读取图片
    img = cv2.imread(full_file_path)
    if img is None:
        print(f"跳过无法读取的文件:{full_file_path}")
        continue
    
    # 二选一:处理彩色图就用下面这行;处理灰度图就注释掉,用后面两行
    patches_img = patchify.patchify(img, (512,512,3), step=512-64)
    # img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # patches_img = patchify.patchify(img, (512,512), step=512-64)
    
    # 提取文件名前缀(不带扩展名)
    file_prefix = os.path.splitext(file)[0]
    
    for i in range(patches_img.shape[0]):
        for j in range(patches_img.shape[1]):
            # 根据图片通道数选择patch的索引方式
            single_patch_img = patches_img[i,j,0,:,:,:] if len(img.shape)==3 else patches_img[i,j,:,:]
            patch_file_name = f"{file_prefix}_{i}{j}.jpg"
            full_save_path = os.path.join(save_path, patch_file_name)
            if not cv2.imwrite(full_save_path, single_patch_img):
                raise Exception(f"保存patch失败:{full_save_path}")

额外建议

  • 加入img is None的判断,跳过损坏或无法读取的文件,避免脚本中途崩溃
  • 用os.makedirs(save_path, exist_ok=True)确保保存目录存在,防止保存时因为目录不存在报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:50:40