OpenCV2D 特征框架 (24)处理矩形框集合函数groupRectangles()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
分组对象候选矩形框。
cv::groupRectangles 是 OpenCV 中用于处理矩形框集合的一个函数。它通常被用在对象检测中,以减少冗余的检测结果。例如,在人脸检测或多尺度滑动窗口的目标检测后,可能会产生许多重叠的矩形框。为了简化这些结果,我们可以使用 groupRectangles 函数来合并那些相似或重叠的矩形框。
函数原型
void cv::groupRectangles
(
std::vector< Rect > & rectList,
int groupThreshold,
double eps = 0.2
)
参数
- 参数rectList 输入/输出矩形框向量。输出向量包含保留和分组后的矩形框。(Python列表不会就地修改。)
- 参数groupThreshold 矩形框最小可能数量减一。该阈值用于一个矩形框组中以保留它。
- 参数eps 合并矩形框为一组的边之间的相对差异。
该函数是通用函数partition的一个封装。它使用矩形等价标准对所有输入矩形进行聚类,这种标准将大小和位置相似的矩形组合在一起。相似性由eps定义。当eps=0时,完全不进行聚类。如果eps→+inf,则所有矩形框都被放入一个集群中。然后,包含小于或等于groupThreshold个矩形的小集群会被拒绝。在其他每个集群中,计算平均矩形框并将其放入输出矩形框列表中。
代码示例
#include <opencv2/opencv.hpp>
#include <vector>
int main()
{
// 创建一些示例矩形框
std::vector< cv::Rect > rectList = { cv::Rect( 10, 10, 20, 20 ), cv::Rect( 12, 12, 20, 20 ), cv::Rect( 50, 50, 40, 40 ), cv::Rect( 98, 98, 60, 60 ) };
// 定义组合阈值和相似度阈值
int groupThreshold = 1;
double eps = 0.2;
// 调用groupRectangles函数合并相似矩形
cv::groupRectangles( rectList, groupThreshold, eps );
// 输出合并后的矩形
for ( const auto& rect : rectList )
{
std::cout << "Merged Rectangle: " << rect << std::endl;
}
return 0;
}
运行结果
Merged Rectangle: [20 x 20 from (11, 11)]