1. 项目概述:DrawRotatedRects在机器视觉中的应用
在SMT贴片机或PCB组装设备中,精确识别和绘制旋转矩形是核心的视觉处理需求。org.openpnp.vision.pipeline.stages.DrawRotatedRects作为OpenPnP视觉管道的一个关键组件,专门用于在图像上标注经过旋转的矩形区域。这个功能看似简单,但在实际工业场景中,它直接关系到元件定位的精度和后续贴装的准确性。
我最早接触这个功能是在开发一款高精度贴片机视觉系统时。当时我们需要在PCB图像上实时标注识别到的元件位置,包括它们的旋转角度。DrawRotatedRects不仅解决了显示问题,其内部实现还涉及到了图形学中的仿射变换、边缘抗锯齿处理等关键技术点。
2. 核心功能解析
2.1 旋转矩形的数学表示
在OpenCV等视觉库中,旋转矩形通常通过以下参数定义:
- 中心点坐标(x,y)
- 宽度和高度(w,h)
- 旋转角度θ(通常以度为单位,顺时针方向为正)
这种表示方法与常规的边界框(BoundingBox)不同,它需要考虑旋转后的几何特性。在实际处理中,系统需要先将旋转矩形转换为四个顶点坐标,然后进行绘制。
java复制// 典型旋转矩形参数示例
RotatedRect rect = new RotatedRect(
new Point(100, 100), // 中心点
new Size(50, 30), // 宽高
45 // 旋转角度
);
2.2 绘制流程的技术实现
DrawRotatedRects的内部工作流程可以分为三个关键阶段:
-
坐标转换阶段:
- 将旋转矩形参数转换为四个顶点坐标
- 应用可能的图像ROI(Region of Interest)偏移
- 处理坐标系转换(图像坐标与视觉管道坐标的映射)
-
图形绘制阶段:
- 使用Bresenham算法进行直线绘制
- 处理不同颜色空间下的线条颜色(支持RGB/灰度图像)
- 实现抗锯齿效果(对于高精度显示很重要)
-
后处理阶段:
- 叠加到原始图像或创建新的显示层
- 处理透明度混合
