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

如何使用Hough变换(霍夫变换)检测铁路轨枕的水平线条

铁路轨枕水平线条提取代码调整方案

核心调整逻辑是在通用霍夫线检测基础上增加水平角度过滤,同时优化检测参数适配轨枕特征,调整后的代码如下:

import cv2
import numpy as np
  
img = cv2.imread('image.jpg')
# 可选:提前裁剪ROI,保留铁路区域,排除无关区域干扰
# img = img[100:800, 200:1000] # 根据实际拍摄画面调整裁剪坐标

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 可选:增加高斯模糊减少噪声,避免误检
gray = cv2.GaussianBlur(gray, (3,3), 0)

edges = cv2.Canny(gray,50,150,apertureSize = 3)
# 调整霍夫线阈值,可根据实际轨枕密集度上下调整,数值越高检出线条越少
lines = cv2.HoughLines(edges,1,np.pi/180, 180)

# 遍历所有检出的线条,原代码只取第一条会漏检
for line in lines:
    r,theta = line[0]
    # 过滤水平线条:容差设为±10度,可根据拍摄倾斜程度调整容差范围
    if (theta > np.pi/2 - np.pi/18 * 1) and (theta < np.pi/2 + np.pi/18 *1):
        a = np.cos(theta)
        b = np.sin(theta)
        
        x0 = a*r
        y0 = b*r
        
        x1 = int(x0 + 1000*(-b))
        y1 = int(y0 + 1000*(a))
        x2 = int(x0 - 1000*(-b))
        y2 = int(y0 - 1000*(a))
        
        cv2.line(img,(x1,y1), (x2,y2), (0,0,255),2)
      
cv2.imwrite('linesDetected.jpg', img)

关键调整说明

  • 修复了原代码只取第一条检测结果的问题,遍历所有霍夫线输出结果避免漏检
  • 新增角度过滤逻辑,仅保留接近水平的线条,过滤铁轨、背景干扰等倾斜线条
  • 增加可选预处理步骤,可根据实际拍摄场景裁剪铁路区域、增加模糊去噪,进一步降低误检率
  • 可调整的参数说明:
    • 霍夫线检测的第四个阈值参数:数值越高,检出的线条置信度越高,可过滤杂线
    • 角度容差范围:如果拍摄画面有倾斜,可适当放大容差,比如±15度对应np.pi/12*1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:00:05