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

Python单数据点Plot digitizer:批量帧图像角度自动分析需求

可用的Python库及自动化实现方案

完全可以用Python实现这个批量图像分析流程,核心依赖以下工具库:

  • opencv-python:负责图像加载、预处理与特征检测
  • numpy:用于数值计算和角度推导
  • os/glob:遍历目标文件夹中的图像文件

核心实现步骤

  1. 批量读取图像:遍历指定文件夹,筛选出所有图像格式文件(如jpg、png)
  2. 图像预处理:
    • 转为灰度图减少计算量
    • 阈值二值化/边缘检测,突出纸板和极轴的轮廓特征
  3. 轮廓检测与拟合:
    • 提取图像中的轮廓,通过面积、形状等特征筛选出目标纸板和极轴
    • 对目标轮廓拟合最小外接矩形,获取其旋转角度
  4. 计算相对角度:用纸板的旋转角度减去极轴的旋转角度,得到两者的相对夹角
  5. 输出结果:将每帧图像的文件名与对应角度整理为列表返回

简化代码示例

import cv2
import numpy as np
import os

def get_relative_angle(image_path):
    # 加载并预处理图像
    img = cv2.imread(image_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 阈值二值化(参数需根据实际图像调整)
    _, thresh = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY_INV)
    # 边缘检测
    edges = cv2.Canny(thresh, 50, 150)
    
    # 查找轮廓
    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    cardboard_rect = None
    polar_rect = None
    # 筛选目标轮廓(需根据纸板和极轴的实际尺寸/形状调整条件)
    for cnt in contours:
        area = cv2.contourArea(cnt)
        if 800 < area < 6000:
            rect = cv2.minAreaRect(cnt)
            w, h = rect[1]
            # 区分纸板(近似方形)和极轴(长条形)
            if abs(w - h) < 40:
                cardboard_rect = rect
            else:
                polar_rect = rect
    
    if cardboard_rect and polar_rect:
        # 获取旋转角度(注意OpenCV角度坐标系定义,可能需微调)
        cardboard_angle = cardboard_rect[2]
        polar_angle = polar_rect[2]
        # 计算相对角度
        return abs(cardboard_angle - polar_angle)
    return None

def process_image_folder(folder_path):
    angle_results = []
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            full_path = os.path.join(folder_path, filename)
            angle = get_relative_angle(full_path)
            angle_results.append((filename, angle))
    return angle_results

# 使用示例
target_folder = "你的图像文件夹路径"
final_results = process_image_folder(target_folder)
# 打印或保存结果
for name, angle in final_results:
    print(f"{name}: {angle:.2f}°")

关键优化点

  • 预处理的阈值、边缘检测参数需要根据你的图像实际情况调整,确保轮廓提取准确
  • 轮廓筛选的面积、形状条件要贴合纸板和极轴的真实特征,避免误检测
  • 若极轴是固定方向(如图像中的垂直/水平线),可直接用该方向作为角度基准,无需检测极轴轮廓

内容的提问来源于stack exchange,提问作者J.Pottiez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:50:31