【发布时间】:2016-07-12 06:32:19
【问题描述】:
我想使用一个数组作为 k 均值算法的输入。该数组具有 x 和 y 方向的位移值,是 Lucas Kanade 光流估计的结果。代码如下:
已编辑:
int number_of_features=150;
// Lucas Kanade optical flow
cvCalcOpticalFlowPyrLK(frame1_1C,frame2_1C,pyramid1,pyramid2,frame1_features,frame2_features,number_of_features,optical_flow_window, 5,optical_flow_found_feature, optical_flow_feature_error,optical_flow_termination_criteria, 0 );
float Dx[150],Dy[150]; // displacement matrices
float Dis[150][2]; // total displacement matrix
int K=2; // clusters selected
Mat bestLabels, centers;
for(int i = 0; i < number_of_features; i++)
{
CvPoint p,q;
p.x = (int) frame1_features[i].x;
p.y = (int) frame1_features[i].y;
q.x = (int) frame2_features[i].x;
q.y = (int) frame2_features[i].y;
//displacements
Dx[i]=p.x-q.x;
Dy[i]=p.y-q.y;
Dis[i][0] = Dx[i];
Dis[i][1] = Dy[i];
}
// k means algorithm
// Creating Mat for Input data
cv::Mat flt_Dis(150, 2, CV_32F, Dis);
cv::kmeans(flt_Dis, K, bestLabels,TermCriteria(CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0),3, KMEANS_PP_CENTERS, centers);
我已经解决了我之前的问题,现在我想显示集群图像。我猜 bestLabels 存储每个元素的索引,例如如果它被归类为第 0 类或第 1 类。我对吗 ??如何显示集群图像?
【问题讨论】:
-
如果您想获得帮助,请花更多时间格式化代码并提供有关您的问题的所有信息。
cv::kmeans是什么?cvCalcOpticalFlowPyrLK?等 -
我认为有图像处理经验的人可以理解。 cv::kmeans 是 kmeans 算法,而 cvCalcOpticalFlowPyrLK 是使用 Lucas Kanade 方法估计稀疏点集上的光流的函数。
-
不,你不能。只需使用“matrix.convertTo(flt_matrix, CV_32F)”将您的矩阵转换为浮点类型,然后使用它
-
我不确定它是否有效.. 我试过这个:cv::Mat flt_Dis(150, 2, CV_32F, Dis);
-
不,你需要 convertTo
标签: c++ opencv type-conversion k-means