2016-12-12 57 views
0

我一直在研究MNIST數據集來分類手寫數字圖像。我可以讀取圖像並計算它們的直方圖。然後,我將Mat的直方圖推回到矢量中。由於方法(InputArray)的第一個參數導致一些錯誤,我無法實現K-Means聚類算法方法(kmeans())OpenCV中K-Means聚類方法的輸入數據類型(向量<Mat>)

已使用OpenCV 3.0。

vector<Mat> histogram_list; 


//some implementations 


int clusterCount = 10; 
Mat labels, centers; 
int attempts = 5; 
kmeans(samplingHist(histogram_list, h_bins, s_bins), clusterCount, labels, 
    TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10000, 0.0001), 
    attempts, KMEANS_PP_CENTERS, centers); 

有沒有什麼建議可以解決這個問題?

編輯:

mat.int.hpp文件。關於斷言的錯誤失敗了......並且它將我返回到那段代碼。

template<typename _Tp> inline_Tp& Mat::at(int i0, int i1) { 
CV_DbgAssert(dims <= 2); 
CV_DbgAssert(data); 
CV_DbgAssert((unsigned)i0 < (unsigned)size.p[0]); 
CV_DbgAssert((unsigned)(i1 * DataType<_Tp>::channels) < (unsigned)(size.p[1] * channels())); 
CV_DbgAssert(CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1()); 
return ((_Tp*)(data + step.p[0] * i0))[i1]; 

}

我嘗試用採樣從載體墊子上解決問題。然而它無法幫助解決它。我在哪裏犯了一個錯誤?

Mat samplingHist(vector<Mat> &vec, int h, int s) { 
    Mat samples(vec.size(), h * s, CV_32F); 
    for (int k = 0; k < vec.size(); k++) 
     for (int y = 0; y < h; y++) 
      for (int x = 0; x < s; x++) 
       samples.at<float>(k, y* s + x) = vec[k].at<float>(y, x); 
    return samples; 
} 
+0

什麼錯誤? –

+0

您正在使用哪種opencv版本? – Rama

回答