0

我正在使用 -Lucas-kanade 算法来计算带有 openCV 的视频序列的光流。我得到了运动矢量。现在我想将这些运动矢量分组到一些集群中。彼此靠近的向量我想将它们组合在一起。诸如最近邻方法之类的事情。但我不知道如何实现它。任何帮助将不胜感激。

谢谢你。

运行光流算法后,我使用 cvKMeans2() 对角点进行分组...

我在向量集群容器的向量中有集群。现在我想在每个集群周围画一条边界线..我不确定我该怎么做...如果有人知道请帮忙。

使用 openCV 手册中的以下代码,我在每个集群周围画了一个圆圈..但我想画一个矩形而不是一个圆圈..任何人请帮助我。

    for(int h = 0; h < clusterContainer.size(); h++ )
        {

           CvPoint pt1,pt2;
               CvMat box[100];

           pt1.x=(int)points->data.fl[h*2];
           pt1.y=(int)points->data.fl[h*2+1];
              cvCircle( frame1, pt1, 20, CV_RGB(255,255,0),4);

}

在此处输入图像描述

4

3 回答 3

1

要从一组点中获取边界矩形,可以使用 OpenCV boundingRect()函数。还要注意类似的fitEllipse()函数。

boundingRect
计算点集的右上边界矩形。

C++: Rect boundingRect(InputArray points)  
Python: cv2.boundingRect(points) → retval
C: CvRect cvBoundingRect(CvArr* points, int update=0 )
Python: cv.BoundingRect(points, update=0) → CvRect

参数: points - 输入 2D 点集,存储在 std::vector 或 Mat 中。
该函数计算并返回指定点集的最小垂直边界矩形。

fitEllipse
在一组 2D 点周围拟合一个椭圆。

C++: RotatedRect fitEllipse(InputArray points)
Python: cv2.fitEllipse(points) → retval
C: CvBox2D cvFitEllipse2(const CvArr* points)
Python: cv.FitEllipse2(points) → Box2D

参数:points——输入二维点集,存储在:

std::vector<> or Mat (C++ interface)
CvSeq* or CvMat* (C interface)
Nx2 numpy array (Python interface)

该函数计算最适合(在最小二乘意义上)一组 2D 点的椭圆。它返回内接椭圆的旋转矩形。使用算法 [Fitzgibbon95]。

于 2012-11-06T08:56:35.780 回答
1

我使用 KMEAN 算法对具有相似方向和大小的运动矢量进行分组。

于 2014-09-25T00:30:57.223 回答
0

在示例图像中,为什么要将具有相同方向且彼此靠近的向量分组?
请记住,在 2D 中,图像中指向行进方向的向量都有不同的角度/方向。

我建议您将或多或少指向相同图像点的所有向量组合在一起。

于 2012-06-07T09:48:43.457 回答