1. 焊缝图像采集与预处理

任务目标

本案例面向视觉引导焊接系统,完成焊缝图像的采集方案设计,并实现灰度化、滤波与增强预处理流程,为后续焊缝特征提取与定位提供高质量输入图像。

环境与依赖

  • Python 3.8+,OpenCV 4.5+,NumPy 1.20+
  • 图像采集:USB工业相机(如海康威视MV-CA013-20UC),通过OpenCV VideoCapture调用
  • 若暂无相机,可使用本地焊缝图像文件验证预处理流程

图像采集方案

采用工业相机配合LED条形光源,以低角度(约15°~30°)照射焊缝区域,减少反光与弧光干扰。相机光轴与焊缝法线夹角控制在5°以内,采集分辨率设为1280×960,帧率30fps。曝光时间根据环境光自动调整,建议初始值5000μs,增益不超过12dB以避免噪声放大。

预处理流程与关键代码

预处理流程为:灰度化 → 中值滤波 → 直方图均衡化 → 伽马校正。灰度化将三通道图像转为单通道,降低计算量;中值滤波在去噪同时保留焊缝边缘锐度;直方图均衡化增强对比度;伽马校正补偿低灰度区域细节,使焊缝坡口与母材边界更清晰。

import cv2
import numpy as np

def capture_frame(camera_id=0, width=1280, height=960):
    """从工业相机采集一帧图像,返回BGR格式"""
    cap = cv2.VideoCapture(camera_id)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
    ret, frame = cap.read()
    cap.release()
    if not ret:
        raise RuntimeError("相机采集失败,请检查连接")
    return frame

def preprocess_weld_image(bgr_img, gamma=1.5):
    """
    焊缝图像预处理主流程
    输入: BGR图像
    输出: 增强后的单通道灰度图
    """
    # 1. 灰度化
    gray = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2GRAY)

    # 2. 中值滤波去噪(核大小5,保留边缘)
    denoised = cv2.medianBlur(gray, 5)

    # 3. 直方图均衡化增强对比度
    equalized = cv2.equalizeHist(denoised)

    # 4. 伽马校正提升暗部细节
    look_up_table = np.array([
        ((i / 255.0) ** (1.0 / gamma)) * 255 for i in range(256)
    ]).astype("uint8")
    enhanced = cv2.LUT(equalized, look_up_table)

    return enhanced

if __name__ == "__main__":
    # 方式一:从相机实时采集
    # frame = capture_frame(0)
    # 方式二:从本地文件读取(验证用)
    frame = cv2.imread("weld_seam.jpg")
    if frame is None:
        raise FileNotFoundError("未找到weld_seam.jpg,请放置焊缝图像")

    result = preprocess_weld_image(frame)

    # 保存结果用于对比
    cv2.imwrite("weld_preprocessed.jpg", result)
    print("预处理完成,结果已保存为 weld_preprocessed.jpg")

运行与验证

  1. 安装依赖:pip install opencv-python numpy
  2. 将一张焊缝原始图像命名为weld_seam.jpg放在脚本同目录
  3. 运行脚本:python weld_preprocess.py
  4. 观察输出文件weld_preprocessed.jpg,与原图对比

通过判定标准:预处理后图像中焊缝坡口边缘与母材背景的灰度差异明显增大,焊缝区域纹理细节(如坡口边界线)肉眼可辨,且无明显椒盐噪声残留。若使用相机实时采集,程序能正常读取一帧图像并完成上述处理,即视为采集与预处理链路打通。

焊缝图像预处理流程 原始BGR图像 含噪声/低对比度 灰度化 单通道灰度图 计算量降低 中值滤波 去噪后图像 边缘保持平滑 直方图均衡 对比度增强 灰度分布扩展 伽马校正 输出 暗部细节增强 关键参数:中值滤波核=5 | 伽马值=1.5 | 输出为单通道8位灰度图 验证方式:对比原图与输出图,焊缝坡口边界灰度差应显著增大

常见问题

  • 图像过暗或过曝:调整相机曝光时间(建议2000~10000μs范围)或光源亮度,确保焊缝区域灰度均值在100~180之间。
  • 滤波后边缘模糊:中值滤波核从5降至3,或改用双边滤波(cv2.bilateralFilter)在去噪同时保护边缘。
  • 弧光干扰严重:在相机镜头前加装窄带滤光片(中心波长与光源一致),并在软件中增加ROI裁剪,仅保留焊缝附近区域。