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

org.openpnp.vision.pipeline.stages.MatchPartTemplate

文章目录

  • org.openpnp.vision.pipeline.stages.MatchPartTemplate
    • 功能
    • 参数
    • 例子
    • 效果
    • END

org.openpnp.vision.pipeline.stages.MatchPartTemplate

功能

用于在图像中匹配单个零件并校正其方向。它接收一个候选的旋转矩形(RotatedRect)和一张模板图像,通过模板匹配确定零件的精确角度(在 0°、90°、180°、270° 四个离散方向中选择最佳匹配),并输出校正后的旋转矩形。

参数

参数名类型默认值描述
logbooleanfalse是否启用详细日志输出。若为true,在控制台打印匹配过程中的中间信息(如候选矩形角度、每次旋转的得分、获胜旋转等)。
templateStageNameString无(必需)提供模板图像(以及可选的模板RotatedRect模型)的前一阶段名称。该阶段必须输出包含图像(Result.image)和可选的RotatedRect模型。
modelStageNameString无(必需)提供候选零件模型(RotatedRectList<RotatedRect>)的前一阶段名称。该阶段必须输出RotatedRect或其列表(取第一个),表示零件的大致位置和尺寸。
thresholddouble0.4模板匹配的得分阈值(归一化相关系数)。匹配得分低于该值的旋转方向将被忽略。取值范围通常为 0~1,值越高要求匹配越严格。

例子

importcv2importnumpy as np def generate_all_images():# 1. 模板图像(正面红色矩形,宽200高100)template=np.zeros((100,200,3),dtype=np.uint8)cv2.rectangle(template,(0,0),(200,100),(0,0,255),-1)cv2.imwrite("template_rect.png",template)print("生成模板:template_rect.png")#2.测试图像(蓝色背景640x480) img=np.full((480,640,3),(255,0,0),dtype=np.uint8)# 红色矩形1:中心(150,150),尺寸150x80,角度30°(完全在图像内,左边界不超出) rect1=((150,150),(150,80),30)box1=cv2.boxPoints(rect1)box1=np.int32(box1)cv2.fillPoly(img,[box1],(0,0,255))# 红色矩形2:中心 (480, 280),尺寸 150x80,角度 120°(完全在图像内,不超出右边界和下边界)rect2=((480,280),(150,80),120)box2=cv2.boxPoints(rect2)box2=np.int32(box2)cv2.fillPoly(img,[box2],(0,0,255))# 绿色三角形(干扰物,不与红色矩形重叠,完全在图像内)# 放置在右下角空白区域,红色矩形2右边界约624,下边界约450,三角形选在(600, 440)附近pts=np.array([[580,430],[620,460],[560,460]], np.int32)cv2.fillPoly(img,[pts],(0,255,0))cv2.imwrite("test_multi_parts.png", img)print("生成测试图像: test_multi_parts.png (两个红色矩形+一个绿色三角形,均不重叠且完全在图像内)")if__name__=="__main__":generate_all_images()
<cv-pipeline><stages><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRead"name="readTest"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\test_multi_parts.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="testBgr2Hsv"enabled="true"conversion="Bgr2HsvFull"/><cv-stageclass="org.openpnp.vision.pipeline.stages.MaskHsv"name="extractRedTest"enabled="true"auto="false"fraction-to-mask="0.0"hue-min="235"hue-max="21"saturation-min="50"saturation-max="255"value-min="50"value-max="255"soft-edge="0"soft-factor="1.0"invert="true"binary-mask="true"property-name="MaskHsv"/><cv-stageclass="org.openpnp.vision.pipeline.stages.FindContours"name="contoursTest"enabled="true"retrieval-mode="External"approximation-method="Simple"/><cv-stageclass="org.openpnp.vision.pipeline.stages.MinAreaRectContours"name="candidateRects"enabled="true"contours-stage-name="contoursTest"/><cv-stageclass="org.openpnp.vision.pipeline.stages.FilterRects"name="filterSize"enabled="true"width-max="200.0"width-min="80.0"length-max="120.0"length-min="50.0"aspect-ratio-max="0.0"aspect-ratio-min="0.0"enable-logging="true"rotated-rects-stage-name="candidateRects"/><cv-stageclass="org.openpnp.vision.pipeline.stages.SelectSingleRect"name="selectRect"enabled="true"position="0"rotated-rects-stage-name="filterSize"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRead"name="readTemplateColor"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\template_rect.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="templateBgr2Hsv"enabled="true"conversion="Bgr2HsvFull"/><cv-stageclass="org.openpnp.vision.pipeline.stages.MaskHsv"name="templateBinary"enabled="true"auto="false"fraction-to-mask="0.0"hue-min="235"hue-max="21"saturation-min="0"saturation-max="255"value-min="0"value-max="255"soft-edge="0"soft-factor="1.0"invert="false"binary-mask="true"property-name="MaskHsv"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRecall"name="recallTest"enabled="true"image-stage-name="readTest"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="testGray"enabled="true"conversion="Bgr2Gray"/><cv-stageclass="org.openpnp.vision.pipeline.stages.MatchPartTemplate"name="matchPart"enabled="true"log="true"template-stage-name="templateBinary"model-stage-name="selectRect"threshold="0.1"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRecall"name="recallOriginal"enabled="true"image-stage-name="readTest"/><cv-stageclass="org.openpnp.vision.pipeline.stages.DrawRotatedRects"name="drawCorrected"enabled="true"rotated-rects-stage-name="matchPart"thickness="4"draw-rect-center="false"rect-center-radius="20"show-orientation="false"><colorr="255"g="255"b="255"a="255"/></cv-stage><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageWrite"name="save"enabled="true"file="output_matched_single.png"/></stages></cv-pipeline>

效果

END

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

相关文章:

  • 【蓝牙开发指南】解决Keil5+nRF52832安装Pack时的常见错误及避坑技巧
  • 手把手教你学Simulink——基于Simulink的CLLC谐振变换器双向对称控制
  • 天猫超市购物卡快速回收,操作简单全程透明 - 团团收购物卡回收
  • 倒计时98天!2026奇点大会AI配音应用准入清单已启动内测——仅开放37家生态伙伴申请
  • Mac窗口置顶神器Topit:智能窗口管理,工作效率飙升200%
  • 旋片真空泵厂家/真空系统厂家/高真空机组厂家有哪些?水环真空泵/真空脱泡机哪家好?2026年品牌前七强权威推荐:盛飞领衔 - 栗子测评
  • 别再让网卡拖后腿!手把手教你调优工业相机网卡,解决丢帧、卡顿问题(附巨帧/缓冲区设置避坑指南)
  • C++的std--ranges管道优化
  • gInk热键配置终极指南:自定义快捷键提升工作效率
  • Panel版本升级终极指南:从旧版本平滑迁移到最新版的完整教程
  • 2026年源头智造精准赋能——苏州煜景衡(动态检重秤源头工厂+不锈钢滚筒秤知名厂家)品质技术解析 - 品牌推荐大师1
  • 终极Sunshine游戏串流指南:5分钟搭建你的跨设备游戏共享平台
  • 终极KMS激活解决方案:KMS_VL_ALL_AIO高效激活工具深度解析
  • ESP WiFi中继器终极访问控制指南:基于MAC地址的安全管理
  • 2946基于52单片机的16层电梯控制系统设计
  • 微信社交圈大扫除:如何一键发现那些悄悄离开的朋友?
  • Nintendo Switch游戏文件管理终极指南:NSC_BUILDER实战应用全解析
  • 从BetterSegmentedControl学习iOS控件开发的最佳实践
  • Claude Skill 编写入门:让 AI 拥有专属技能
  • 思源宋体完全指南:7种字重免费字体如何改变你的中文排版体验
  • 2026年广东隔膜泵采购避坑指南:为什么多数设备厂商忽略了这3个选型细节? - 速递信息
  • 如何用深度学习实现实时手语翻译?手语识别项目全解析
  • RMBG-1.4模型解析:深入理解其架构与原理
  • 探索猫抓浏览器扩展:HTTP流媒体嗅探与M3U8解析的终极指南
  • 智能体(Reflexion)架构范式
  • 2932基于51单片机的雨量自适应雨刮器控制系统设计(数码管,手自动)
  • SAP财务必看:OB07/OB08维护汇率后,用ABAP代码实现自动转换的完整流程
  • 从SR到D触发器:5分钟搞懂数字电路中的各种触发器演变史
  • 2026年高速高精度动态检重秤选型指南:苏州煜景衡技术方案与工业应用解析 - 品牌推荐大师1
  • Sunshine游戏串流终极指南:5分钟搭建你的跨平台游戏共享中心