文章目录
- org.openpnp.vision.pipeline.stages.MaskCircle
- 功能
- 参数
- 生成测试图片
- 例子 - 对圆形外部做掩码
- 效果
- 例子 - 对圆形内部做掩码
- END
org.openpnp.vision.pipeline.stages.MaskCircle
功能
用于对当前工作图像应用圆形掩码。该阶段会创建一个以图像中心为圆心、指定直径的圆形区域,并将该区域之外的所有像素设置为黑色(即掩码效果)。若直径值为负,则掩码效果反转:圆形区域内部变为黑色,外部保留。此外,支持通过 propertyName 属性在管道运行时动态覆盖直径和圆心位置(例如通过脚本或执行器调整)。若直径设置为 0,该阶段会将整个图像变为黑色(常用于调试或清空图像)。
该阶段不直接修改原始工作图像,而是生成一个新的掩码后的图像作为输出。
参数
| 参数名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
diameter | int | 100 | 圆形掩码的直径(像素)。若为正值,保留圆形内部;若为负值,保留圆形外部(反转掩码)。若为0,则整个图像被设为黑色。 |
propertyName | String | "MaskCircle" | 用于动态覆盖该阶段参数的属性名。通过pipeline.setProperty(propertyName + ".diameter", value)或pipeline.setProperty(propertyName + ".center", value)可在运行时调整直径或圆心位置。若diameter = 0,则该属性名会被清空(禁用动态控制)。 |
生成测试图片
importcv2importnumpy as np def generate_circle_test_image(output_path="circle_test.png",size=(640,480)):# 创建彩虹渐变背景(BGR)bg=np.zeros((size[1],size[0],3),dtype=np.uint8)for y in range(size[1]):for x in range(size[0]):# 彩虹色:色调随 x 和 y 变化 hue=(x*180//size[0]+y*180//size[1])%180sat=255val=200+int(55*np.sin(x/50)*np.cos(y/50))# HSV 转 BGRhsv=np.uint8([[[hue, sat, val]]])bgr=cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)[0][0]bg[y, x]=bgr# 在中心添加一个明显的圆形图案(白色圆环 + 红色实心圆)center=(size[0]//2, size[1]//2)radius=80# 红色实心圆cv2.circle(bg, center, radius,(0,0,255), -1)# 白色圆环cv2.circle(bg, center, radius+10,(255,255,255),5)# 添加一些噪声noise=np.random.randint(0,20, bg.shape,dtype=np.uint8)bg=cv2.add(bg, noise)cv2.imwrite(output_path,bg)print(f"测试图片已生成: {output_path}")if__name__=="__main__":generate_circle_test_image()例子 - 对圆形外部做掩码
<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\circle_test.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.MaskCircle"name="maskInside"enabled="true"diameter="200"property-name="MaskCircle"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageWrite"name="save"enabled="true"file="output_mask_inside.png"/></stages></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\circle_test.png"color-space="Bgr"handle-as-captured="false"/><cv-stageclass="org.openpnp.vision.pipeline.stages.MaskCircle"name="maskInside"enabled="true"diameter="-200"property-name="MaskCircle"/><cv-stageclass="org.openpnp.vision.pipeline.stages.ImageWrite"name="save"enabled="true"file="output_mask_inside.png"/></stages></cv-pipeline>