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

如何用Python鲁棒检测低对比度黑色矩形的两条边缘位置

鲁棒性检测黑色矩形边缘坐标方案

核心思路

针对Frame 1与Frame 4这类明暗、背景存在差异的场景,通过灰度归一化+自适应阈值分割统一分离黑色矩形与背景,结合形态学操作消除噪声,最终用边缘检测+直线拟合精准定位目标边缘。

具体实现步骤(以OpenCV为例)

  • 预处理:灰度转换与归一化
    先将彩色图转灰度图,再做灰度归一化消除全局明暗差异,让不同亮度的图片具备统一处理基础:
    import cv2
    import numpy as np
    
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    normalized = cv2.normalize(gray, None, 0, 255, cv2.NORM_MINMAX)
    
  • 自适应阈值分割
    用自适应阈值替代固定阈值,适配局部明暗变化,确保黑色矩形在不同背景下都能被准确分割:
    thresh = cv2.adaptiveThreshold(normalized, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
    
  • 形态学去噪
    通过闭运算(腐蚀+膨胀)消除小噪声点,同时保留矩形边缘的完整性:
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
    cleaned = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
    
  • 边缘检测与直线拟合
    用Canny提取边缘后,通过霍夫直线变换拟合目标边缘,过滤掉非目标的短直线:
    edges = cv2.Canny(cleaned, 50, 150)
    lines = cv2.HoughLinesP(edges, 1, np.pi/180, threshold=50, minLineLength=100, maxLineGap=10)
    
    最后从拟合结果中筛选垂直方向的两条边缘,提取它们的x坐标,y坐标可覆盖矩形的上下范围。

适配差异场景的关键细节

  • 归一化操作能拉平Frame 1(亮背景)与Frame 4(暗背景)的全局亮度差,让阈值分割逻辑通用。
  • 若矩形存在轻微倾斜,可先通过轮廓检测获取旋转角度,做仿射变换矫正后再检测边缘,进一步提升鲁棒性。

内容的提问来源于stack exchange,提问作者Matheus E. Knop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:48:45