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

org.openpnp.vision.pipeline.stages.ThresholdAdaptive

文章目录

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

org.openpnp.vision.pipeline.stages.ThresholdAdaptive

功能

ThresholdAdaptive 是 OpenPnP 视觉管道中的一个自适应阈值二值化阶段,用于处理光照不均的图像。与固定阈值 Threshold 不同,它根据每个像素邻域的局部特性动态计算阈值,从而更好地分离前景和背景。
局部阈值计算:对每个像素,以其为中心的 blockSize × blockSize 邻域内计算均值或加权高斯和,减去常数 cParm 得到该像素的阈值。

二值化输出:将像素值与局部阈值比较,大于阈值的设为 255(白色),否则为 0(黑色),可选的 invert 参数反转黑白。

两种自适应方法:

Mean:邻域均值法。

Gaussian:邻域加权高斯和法(对中心像素权重更高)。

参数

参数名数据类型默认值功能描述
adaptiveMethodAdaptiveMethodMean自适应阈值算法。可选值:Mean(邻域均值)、Gaussian(邻域加权高斯和)。
invertbooleanfalse是否反转二值化结果。false:前景为白色(255),背景为黑色(0);true:前景为黑色,背景为白色。
blockSizeint127计算阈值所用的像素邻域尺寸。必须是奇数且 ≥ 3。实际值会被调整为不小于3的奇数。
cParmint80从计算出的局部均值或加权均值中减去的常数。可为负值,用于调整阈值灵敏度。

例子

importcv2importnumpy as np def generate_color_rects_image(output_path):"""生成彩色背景图像,包含多个不同尺寸、颜色、角度的旋转矩形(无网格线)""" width, height=800,600img=np.full((height, width,3),(240,240,240),dtype=np.uint8)# 浅灰色背景# 定义矩形列表:(中心x,中心y, 宽w,高h, 角度, 颜色BGR, 标签)rects=[(200,150,80,50,30,(0,0,255),"R1"),# 红色,80x50(600,150,60,40, -20,(0,255,0),"R2"),# 绿色,60x40(200,400,100,70,15,(255,0,0),"R3"),# 蓝色,100x70(600,400,90,60, -45,(0,255,255),"R4"),# 黄色,90x60(400,300,120,80,0,(255,255,0),"R5"),# 青色,120x80(太大)(150,80,30,20,60,(255,0,255),"R6"),# 紫色,30x20(太小)]for(cx, cy, w, h, angle, color, label)inrects: rect=((cx, cy),(w, h), angle)box=cv2.boxPoints(rect)box=np.array(box,dtype=np.int32)overlay=img.copy()cv2.fillPoly(overlay,[box], color)cv2.addWeighted(overlay,0.6, img,0.4,0, img)cv2.drawContours(img,[box],0,(0,0,0),2)cv2.putText(img, label,(cx-20, cy-10), cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,0),1)print(f"{label}: 宽={w}, 高={h}, 角度={angle}")cv2.imwrite(output_path, img)print(f"已生成彩色测试图像: {output_path}")if__name__=="__main__":generate_color_rects_image("color_rects_test.png")
<cv-pipeline><stages><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageRead"name="loadImage"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\color_rects_test.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ConvertColor"name="toGray"enabled="true"conversion="Bgr2Gray"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ThresholdAdaptive"name="adaptiveBin"enabled="true"adaptive-method="Mean"invert="false"block-size="11"c-parm="50"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageWrite"name="saveResult"enabled="true"file="D:\3rd\openpnp_prj\openpnp-official\openpnp-test-images\my_test\adaptive_result.png"/></stages></cv-pipeline>

效果

blockSize和cParm都不能太大,否则前后背景剥离的效果不好。
通过调整blockSize和cParm,可以得到非常干净的黑白线图。
可以看到,使用ThresholdAdaptive比Threshold要更自由。

END

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

相关文章:

  • 免费Windows风扇控制软件FanControl:打造静音高效散热系统的终极指南
  • 终极指南:3分钟上手AppImageLauncher,让Linux应用安装像Windows一样简单 [特殊字符]
  • SVGOMG:SVGO缺失的GUI界面,SVG优化技术的现代化解决方案
  • TwinCAT3 ADS路由死活加不上?别慌,这份保姆级排查清单帮你搞定(附Win7/CE系统差异)
  • 别再死记硬背了!用Python+NumPy手把手模拟地震子波合成与分辨率分析
  • AutoGen保姆级教程:5分钟搭建自动编程+调试的AI双代理系统
  • Java的java.util.HexFormat双向支持
  • 5个微观经济学必考公式图解:从边际效用递减到谷贱伤农
  • 别再死记F-22/FB60了!SAP F-02超级凭证的记账码(Posting Key)保姆级使用指南
  • Java虚拟机精讲【1.0】
  • 第四章——从涡面到升力:不可压缩绕翼流动的理论构建与应用
  • 当AGI从医疗迁移到金融却崩溃时:3个反直觉的梯度冲突信号,90%工程师第2步就误判
  • 从Log4j2到任意文件上传:一次完整的致远OA V8.0漏洞实战复现与深度分析
  • 华为交换机端口OID索引值查询与网络监控实战
  • CVAT在Ubuntu 20.04上的完整安装指南:从Docker配置到多人协作避坑
  • Java 类加载机制的内部逻辑
  • 情绪消费本该更年轻,很多品牌反而更老了
  • Java虚拟机精讲【1.1】
  • 手把手教你用OWASP ZAP给HTTPS网站做安全体检:解决证书告警与代理配置的那些坑
  • Illustrator批量替换神器:ReplaceItems.jsx从入门到精通
  • ShiroAttack2:企业级Shiro反序列化漏洞检测与响应解决方案
  • ConvNeXt 系列改进:2026前沿趋势:当 ConvNeXt 遇上 Mamba,探索纯卷积与状态空间模型的混合架构优势
  • 揭秘2026奇点大会闭门圆桌争议焦点:AGI是否正在杀死“人设运营”?3个已被验证的生存策略
  • 综述 锂电电解液中碳酸酯类添加剂
  • 别再乱点CarSim2019菜单了!搞懂Datasets和Libraries联动逻辑,悬架仿真效率翻倍
  • 【MQTT安全实践】从零构建用户密码认证体系:原理、配置与ESP8266实战
  • Claude Design 登场,设计工具分化,Figma“Sketch 时刻”将至?
  • 产品路线图管理化技术中的产品路线图计划产品路线图实施产品路线图验证
  • 5分钟掌握Input Leap:免费开源KVM软件跨平台键鼠共享终极指南
  • FPGA等精度测频实战:手把手教你复刻电子竞赛频率计(含Verilog代码与SignalTap调试)