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

基于OpenCV的弯曲导线角度测量方法咨询

弯线角度检测的实操方案

一、先做图像预处理

  • 灰度化:把彩色图转成灰度图,减少计算量,用OpenCV的话就是cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  • 高斯模糊:给图像降个噪,避免小杂点干扰后续边缘检测,代码是cv2.GaussianBlur(gray, (5,5), 0)
  • Canny边缘检测:把导线轮廓抠出来,cv2.Canny(blur, 50, 150),这两个阈值可以根据实际图像微调,调准了能精准提取导线边缘

二、用霍夫变换抓导线的直线段

你要的直线检测和坐标获取,用霍夫变换就能搞定,推荐用概率霍夫变换,比传统方法高效得多:

lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=30, minLineLength=50, maxLineGap=10)
  • 参数简单说明:
    • edges是刚才边缘检测后的图像
    • 1和np.pi/180是像素、角度步长,不用改动
    • threshold:数值越高,检测到的直线越精准,能过滤掉杂线
    • minLineLength:只保留长度超过该值的线段,避免把小噪点当成导线
    • maxLineGap:如果导线有轻微断开,这个参数能把同一段的线段连起来
  • 遍历lines就能拿到每段直线的四个端点坐标(x1,y1,x2,y2),要画直线的话直接用cv2.line(img, (x1,y1), (x2,y2), (0,255,0), 2),就能在原图上画出绿色的导线直线段

三、计算弯角的实际角度

拿到相邻两段直线的坐标后,用向量点积算角度就行:

import math
# 第一段直线的方向向量
vec1 = (x2 - x1, y2 - y1)
# 第二段直线的方向向量
vec2 = (x4 - x3, y4 - y3)
# 点积计算夹角
dot_product = vec1[0] * vec2[0] + vec1[1] * vec2[1]
# 计算向量模长
mag1 = math.hypot(vec1[0], vec1[1])
mag2 = math.hypot(vec2[0], vec2[1])
# 弧度转角度
angle_rad = math.acos(dot_product / (mag1 * mag2))
angle_deg = math.degrees(angle_rad)
# 实际弯角取180°减计算值还是直接用,看你目标角度的定义
actual_angle = 180 - angle_deg if angle_deg > 90 else angle_deg

四、合格性判断

把算出的实际角度和目标角度做对比,设定一个允许的误差范围(比如±1°),差值在范围内就判定合格,超出则不合格

小技巧:如果检测出的直线太多,可以根据导线的位置(比如只保留图像中间区域的直线)、角度范围(过滤掉明显不是导线的角度)来筛选,只留下需要的导线段

测试图像

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:05:04