当前位置: 首页 > news >正文

org.openpnp.vision.pipeline.stages.DetectLinesHough

文章目录

  • org.openpnp.vision.pipeline.stages.DetectLinesHough
    • 功能
    • 参数
    • 例子
      • 测试图像
      • generate_line_test_image.py
      • cv-pipeline
    • 效果
    • END

org.openpnp.vision.pipeline.stages.DetectLinesHough

功能

在图像中检测直线段
在DetectLinesHough之前,需要执行DetectEdgesCanny来加强执行DetectLinesHough后的效果。

参数

参数类型默认值说明
rhodouble0.5距离分辨率(像素)。累加器在极坐标空间中的单位距离步长。值越小精度越高,但计算量越大。
thetadoubleπ/180 ≈ 0.01745角度分辨率(弧度)。累加器中的角度步长,默认 π/180 表示 1° 分辨率。
thresholdint1000累加器阈值。只有得票数 ≥ 该值的直线才会被检测为候选线段。值越大,检测的线段越少(只保留最明显的线)。
minLineLengthdouble30.0最小线段长度,以图像对角线长度的百分比表示(如 30%)。短于此值的线段被丢弃。
maxLineGapdouble5.0线段上允许的最大间隙,以图像对角线长度的百分比表示。如果同一条直线上两段之间的间隙小于此值,则合并为一条线段。

例子

测试图像

generate_line_test_image.py

# @fn generate_line_test_image.pyimportcv2importnumpy as np# 图像尺寸width, height=800,600# 纯蓝色背景 (BGR: 255, 0, 0) 非黑白色img=np.full((height,width,3),(255,0,0),dtype=np.uint8)#1.一条完整的红色水平线段(无间隙)cv2.line(img,(50,100),(300,100),(0,0,255),thickness=4)#2.一条完整的绿色垂直线段 cv2.line(img,(600,50),(600,250),(0,255,0),thickness=4)#3.一条完整的黄色斜线段 cv2.line(img,(50,500),(350,300),(0,255,255),thickness=4)#4.一条有间隙的青色线段(测试 maxLineGap) # 线段整体从(400,400)(750,550),中间留出40像素的缺口 line_start=(400,400)line_end=(750,550)# 计算方向 dx=line_end[0]-line_start[0] dy=line_end[1]-line_start[1] length=int(np.hypot(dx,dy))# 缺口起始位置(距离起点 100 像素,缺口长度 40 像素)gap_start=100gap_end=140# 逐段绘制prev_end=line_startfordistinrange(0, length +1,10):# 每 10 像素采样一次t=dist / length x=int(line_start[0]+ t * dx)y=int(line_start[1]+ t * dy)ifgap_start<=dist<=gap_end:# 缺口区域不绘制continueifprev_end is not None: cv2.line(img, prev_end,(x, y),(255,255,0),thickness=4)prev_end=(x, y)# 最后补上缺口后的最后一段final_start_x=int(line_start[0]+(gap_end / length)* dx)final_start_y=int(line_start[1]+(gap_end / length)* dy)cv2.line(img,(final_start_x, final_start_y), line_end,(255,255,0),thickness=4)# 可选:添加文字说明cv2.putText(img,"Red: full line",(50,70), cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,0,255),2)cv2.putText(img,"Green: full vertical",(600,30), cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,0),2)cv2.putText(img,"Yellow: full diagonal",(50,470), cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,255),2)cv2.putText(img,"Cyan: with gap (middle missing)",(400,380), cv2.FONT_HERSHEY_SIMPLEX,0.6,(255,255,0),2)# 保存图像output_path="test_lines.png"cv2.imwrite(output_path, img)print(f"测试图像已生成: {output_path}")

cv-pipeline

<cv-pipeline><stages><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRead"name="read"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\test_lines.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="gray"enabled="true"conversion="Bgr2Gray"/><cv-stageclass="org.openpnp.vision.pipeline.stages.BlurGaussian"name="blur"enabled="true"kernel-size="3"property-name="BlurGaussian"/><cv-stageclass="org.openpnp.vision.pipeline.stages.DetectEdgesCanny"name="edges"enabled="true"threshold-1="25.0"threshold-2="75.0"/><cv-stageclass="org.openpnp.vision.pipeline.stages.DetectLinesHough"name="lines"enabled="true"rho="0.5"theta="0.01745"threshold="50"min-line-length="10.0"max-line-gap="0.85"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRecall"name="0"enabled="true"image-stage-name="read"/><cv-stageclass="org.openpnp.vision.pipeline.stages.DrawContours"name="draw"enabled="true"contours-stage-name="lines"thickness="2"index="-1"><colorr="0"g="0"b="0"a="255"/></cv-stage><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageWrite"name="save"enabled="true"file="output_lines_fixed.png"/></stages></cv-pipeline>

效果

DetectLinesHough参数是 max-line-gap=“0.85”,再往大了调,字体行就会被判定为直线。

END

http://www.jsqmd.com/news/643466/

相关文章:

  • 谁在定义企业级Agent标准?一次硬核测评给出了答案
  • 财务法务福音!Qwen3-VL-30B智能合同字段提取保姆级教程
  • AI人体骨骼关键点检测作品集:多场景骨架图生成,效果直观一目了然
  • 像素史诗效果展示:研报生成过程中的‘能量值’反馈与推理稳定性监测
  • 4月15日成都地区振鸿产焊管(Q235B;内径DN15-200mm)现货报价 - 四川盛世钢联营销中心
  • 移动端架构演进
  • MySQL8.0升级到MySQL8.4避坑:密码插件问题
  • Qwen2.5-VL-7B-Instruct快速上手:网页截图→响应式HTML→CSS样式生成
  • Pixel Epic智识终端入门教程:动态卷轴流式输出与中断续写功能详解
  • 忍者像素绘卷:天界画坊Proteus仿真联动:为电子设计添加像素艺术界面
  • UiPath003 创建基本库
  • Ubuntu 20.04下快速配置Fcitx框架与谷歌拼音输入法
  • 2026年行业内二次元投影仪生产公司,影像测量仪/2.5次元测量仪/二次元检测仪/三次元测量仪,二次元投影仪研发哪个好 - 品牌推荐师
  • JS逆向|猿人学逆向反混淆练习平台第13题加密分析
  • Gemma-3-12b-it API封装教程:FastAPI接口开发与图文请求适配
  • OpenClaw人人养虾:openclaw logs
  • 亚洲美女-造相Z-Turbo创意工坊案例:独立艺术家用其生成NFT系列《东方十二时辰》
  • 2026奇点大会多模态翻译系统深度拆解(语音-文本-图像三模态联合推理引擎首次公开)
  • 【仅限首批读者】AIAgent隐私合规自检工具包(含12项自动扫描规则+OWASP AI-Top10映射矩阵)限时开放下载
  • 可灵会员邀请码6B3CRST3TFBL
  • Qwen3-32B长文本处理实战:128K上下文,轻松分析整本电子书
  • Java的java.util.random.RandomGenerator随机数算法实现细节
  • 196.删除重复的电子邮箱
  • MiniCPM-o-4.5-nvidia-FlagOS构建智能知识库:结合向量数据库实现精准问答
  • Nanbeige4.1-3B应用场景:制造业设备维修手册QA系统,支持PDF/图片OCR混合输入
  • 单细胞蛋白组Abseq联合流式技术,深度解锁肿瘤与感染免疫差异奥秘
  • PySide6多线程避坑指南:手把手教你用QMutex和QWaitCondition安全地暂停与恢复线程
  • Canvas Quest提示词安全与内容过滤配置教程
  • 终极Windows优化指南:3分钟用Win11Debloat释放系统性能
  • HarmonyOS 6学习:弹窗生命周期管理与异常处理实战