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

如何使用Python图像处理技术检测钢卷上的捆带数量?

钢卷捆带数量检测Python实现方案

核心依赖库

  • opencv-python:工业场景最常用的图像处理库,内置边缘检测、形态学操作、轮廓识别等所有需要的能力
  • numpy:配合OpenCV完成图像矩阵运算
  • 可选matplotlib:用于中间处理步骤的可视化调试

实现思路

直接使用Canny边缘检测容易受钢卷表面锈迹、光照不均、杂纹干扰,推荐加预处理和筛选步骤提升准确率:

  1. 图像预处理:先转灰度图降低运算量,用高斯模糊去除表面杂点,再做直方图均衡化放大捆带(亮银色)和钢卷主体(暗锈色)的对比度
  2. 边缘优化:做完Canny边缘检测后,用垂直方向的形态学核对边缘做膨胀+腐蚀操作,把断裂的捆带边缘连成长条,同时过滤掉水平方向的无关纹理
  3. 轮廓筛选计数:提取所有外接轮廓后,按高宽比、面积两个维度过滤,符合捆带特征的轮廓数量就是最终的捆带数

可直接运行的示例代码

首先安装依赖:
pip install opencv-python numpy

参考代码:

import cv2
import numpy as np

def count_steel_bands(img_path):
    # 读取图像
    img = cv2.imread(img_path)
    if img is None:
        return 0
    
    # 1. 预处理步骤
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    blurred = cv2.GaussianBlur(gray, (5, 5), 0)
    equalized = cv2.equalizeHist(blurred)
    
    # 2. 边缘检测+形态学优化
    edges = cv2.Canny(equalized, 50, 150)
    # 垂直形态学核,只保留垂直长条的捆带边缘
    vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 15))
    closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, vertical_kernel)
    
    # 3. 轮廓筛选计数
    contours, _ = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    count = 0
    for cnt in contours:
        x, y, w, h = cv2.boundingRect(cnt)
        # 筛选规则可根据实际场景调整:高宽比>10,高度超过图像高度的1/3
        aspect_ratio = h / w
        if aspect_ratio > 10 and h > img.shape[0] / 3:
            count +=1
    return count

if __name__ == '__main__':
    band_count = count_steel_bands('你的本地钢卷图片路径.jpg')
    print(f"识别到的捆带数量为:{band_count}")

可选优化方向

如果实际场景有钢卷倾斜、光照变化大、背景复杂的情况,可以做以下优化:

  • 新增霍夫直线检测步骤,统计斜率接近的长直线数量,适配捆带倾斜的场景
  • 固定机位的工业场景可以先裁剪ROI(感兴趣区域),只保留钢卷所在的画面区域,排除背景干扰
  • 准确率要求极高的场景可以准备几十张标注数据,用YOLOv8n之类的轻量检测模型微调,泛化性会比传统图像处理方案更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:21:03