我想使用一個數組作爲k均值算法的輸入。該數組具有x和y方向的位移值,並且是Lucas Kanade光流估計的結果。代碼如下:如何在kmeans之後顯示聚集圖像?
編輯:
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'?等 – norisknofun
我認爲有圖像處理經驗的人可以理解。 cv :: kmeans是算法kmeans和cvCalcOpticalFlowPyrLK是使用Lucas Kanade方法估計稀疏點集上的光流的函數。 –
不,你不能。只是將您的矩陣轉換爲「matrix.convertTo(flt_matrix,CV_32F)」的浮動類型,並使用該 – Miki