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

Python+Glob批量处理图片仅单张生效问题求助

问题分析与修复方案

错误原因

  • 核心处理逻辑未循环执行:边缘检测、霍夫变换、画线这些关键代码写在了遍历文件的循环外面,仅会处理最后一张读入的图片,其余图片完全没经过处理流程。
  • 处理结果未存入列表:image_list里存的是原始读入的图片,处理后的图片没有更新到列表中,最后保存的自然是未修改的原图。
  • 保存路径无效:用带通配符的path拼接文件名,会生成类似opencv/imgs/*.*1.jpg的错误路径,系统无法识别。

修正后的代码

import numpy as np
import cv2
import os
import glob
from skimage import img_as_ubyte

image_list = []
# 先获取图片目录,避免用带通配符的路径
img_dir = "opencv/imgs"
path = os.path.join(img_dir, "*.*")

for file in glob.glob(path):
    print(file)
    # 读入图片
    img = cv2.imread(file)
    # 复制一份用于处理,避免修改原始引用(更安全)
    processed_img = img.copy()
    
    # --- 核心处理逻辑移到循环内,每张图都执行 ---
    gray = cv2.cvtColor(processed_img, cv2.COLOR_BGR2GRAY)
    img_blur = cv2.GaussianBlur(gray, (3,5), 2)
    edges = cv2.Canny(image=img_blur, threshold1=25, threshold2=50) # Canny Edge Detection

    # Apply HoughLinesP method
    lines_list = []
    lines = cv2.HoughLinesP(
                edges, 
                1, 
                np.pi/2, 
                threshold=225, 
                minLineLength=60, 
                maxLineGap=400)
    
    # 处理霍夫变换结果,判断lines是否为空(避免无直线时报错)
    if lines is not None:
        for points in lines:
            x1,y1,x2,y2 = points[0]  # 修正原代码中重复赋值x0的错误
            cv2.line(processed_img, (x1,y1), (x2,y2), (0,255,0), 4)
            lines_list.append([(x1,y1),(x2,y2)])
    
    # --- 将处理后的图片存入列表 ---
    image_list.append(processed_img)

# 保存处理后的图片
img_number = 1
for processed_img in image_list:
    # 生成正确的保存路径,避免覆盖原图片
    save_path = os.path.join(img_dir, f"processed_{img_number}.jpg")
    lines_image = img_as_ubyte(processed_img)
    cv2.imwrite(save_path, lines_image)
    img_number +=1 

额外说明

  • 修正了霍夫变换中提取坐标的错误:原代码x0,y1,x0,y2=points[0]是重复赋值x0,会导致只画垂直线,改为x1,y1,x2,y2才能正确识别所有直线。
  • 增加lines is not None判断,避免图片中无检测直线时触发报错。
  • 用os.path.join生成路径,适配不同系统的路径分隔符。
  • 保存时给处理后的图片加processed_前缀,防止覆盖原图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:21:00