OpenCV绘制标签与包围框方法详解

需积分: 5 1 下载量 144 浏览量 更新于2024-08-05 收藏 2KB TXT 举报
"该代码片段是使用OpenCV库在C++中实现的函数,用于在图像上绘制旋转矩形(RotatedRect)的边界框并添加标签。输入参数是一个包含多个旋转矩形的vector,输出是带有标注的图像。代码中通过循环遍历旋转矩形集合,计算每个矩形的边界框位置(Box)和标签位置(Label),并使用随机颜色进行绘制。此外,还定义了文本的缩放系数(reteText)以便调整字体大小,并使用cv::rectangle函数来绘制边界框和标签区域。" 在OpenCV中,`cv::RotatedRect`是一个结构体,用于表示具有任意角度的矩形。它包含三个元素:中心点坐标(x, y)和一个表示矩形尺寸和旋转角度的矩形矩形(width, height, angle)。`boundingRect()`方法用于获取旋转矩形的非旋转包围矩形。 在`DrawBoxLabel`函数中,首先计算每个`RotatedRect`对应的边界框(Box)和标签区域(Label)。边界框的位置和大小直接来源于`boundingRect()`,而标签区域通常放在边界框的左上角,并稍微偏移,以便与边界框保持一定距离。标签的宽度设定为边界框宽度的1/5,高度为边界框高度的1/10。 为了使每个边界框的颜色各异,代码使用了`cv::RNG`类生成随机颜色,并将其赋值给`cv::Scalar`对象(color_Tmp),该对象包含RGB三个分量。`cv::rectangle`函数用于在图像上绘制矩形,第一个参数是目标图像,第二个参数是矩形位置,第三个参数是颜色,第四个参数是线条宽度,第五个参数是线条类型(这里是8连接性)。 `thickness_Boxx`变量定义了边界框线条的宽度,设置为3。在标签区域,使用负值的厚度参数(-1)填充整个矩形区域,而不是只画边框。 `reteText`变量决定了文本的高度。在实际应用中,可能需要根据字体类型和大小调整这个值,以确保文本在图像中的可读性。`F`可能是一个未显示完整的变量名,可能代表字体的大小或类型。 最后,函数内部可能会调用`cv::putText`函数来在标签区域内写入文本,但这部分代码没有提供。`putText`函数需要指定文本内容、位置、字体、字体大小、颜色以及文本的垂直对齐方式。 这段代码是OpenCV中用于标注和可视化检测结果(如物体检测)的典型实现,可以用于各种计算机视觉项目,例如图像分析、目标检测等。