如何使用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
相关产品推荐
相关产品推荐

