下面是我的代碼,這是運行良好,但長期處理後,告訴我在運行時錯誤獲取使用SVM與SURF錯誤
// Initialize constant values
const int nb_cars = files.size();
const int not_cars = files_no.size();
const int num_img = nb_cars + not_cars; // Get the number of images
// Initialize your training set.
cv::Mat training_mat(num_img,dictionarySize,CV_32FC1);
cv::Mat labels(0,1,CV_32FC1);
std::vector<string> all_names;
all_names.assign(files.begin(),files.end());
all_names.insert(all_names.end(), files_no.begin(), files_no.end());
// Load image and add them to the training set
int count = 0;
vector<string>::const_iterator i;
string Dir;
for (i = all_names.begin(); i != all_names.end(); ++i)
{
Dir=((count < files.size()) ? YourImagesDirectory : YourImagesDirectory_2);
Mat row_img = cv::imread(Dir +*i, 0);
detector.detect(row_img, keypoints);
RetainBestKeypoints(keypoints, 20); // retain top 10 key points
extractor->compute(row_img, keypoints, descriptors_1);
//uncluster.push_back(descriptors_1);
descriptors.reshape(1,1);
bow.add(descriptors_1);
++count;
}
int count_2=0;
vector<string>::const_iterator k;
Mat vocabulary = bow.cluster();
dextract.setVocabulary(vocabulary);
for (k = all_names.begin(); k != all_names.end(); ++k)
{
Dir=((count_2 < files.size()) ? YourImagesDirectory : YourImagesDirectory_2);
row_img = cv::imread(Dir +*k, 0);
detector.detect(row_img, keypoints);
RetainBestKeypoints(keypoints, 20);
dextract.compute(row_img, keypoints, descriptors_1);
descriptors_1.reshape(1,1);
training_mat.push_back(descriptors_1);
labels.at<float>(count_2, 0) = (count_2<nb_cars)?1:-1;
++count_2;
}
錯誤:
OpenCv Error : Formats of input argument do not match() in unknown function , file ..\..\..\src\opencv\modules\core\src\matrix.cpp, line 652
我在第二個循環中將descriptor_1
重新整形爲SVM行,但錯誤未解決
關於使用什麼: '墊labelsMat(num_img,CV_32FC1,標籤);'' 墊training_mat(num_img,CV_32FC1,trainingData);' – 2013-08-24 21:31:33
@Flying你想說我的論點沒有組織? – Rocket