Распечатать содержимое вектора

Я хочу выполнить очень простую задачу, но не могу из-за ошибки, которую не могу понять. Я хочу сохранить содержимое обнаруженных объектов в вектор в текстовый файл, используя следующий фрагмент кода

Ptr<FeatureDetector> feature_detector = FeatureDetector::create("SIFT");
vector<KeyPoint> keypoints;

feature_detector->detect(img, keypoints);

for(unsigned int i = 0; i < keypoints.size(); i++)
{
ofstream outf("vector.txt", ios::app);
outf<<"value at "<< i << " = " << keypoints.at<KeyPoint>(i)<<endl;
}

Но мне преподносят следующую ошибку:

станд :: вектор<_Ty> :: at ‘: вызов функции отсутствует в списке аргументов; использование
‘&станд :: вектор<_Ty> :: at ‘для создания указателя на член

Я проверил свой синтаксис и не могу найти ничего неправильного.

Редактировать: До этого я хотел распечатать содержимое матрицы, и этот формат отлично сработал, вот код, который я использовал для печати содержимого матрицы:

for(int x = 0;x < dst.rows ; x++)
{
for( int y = 0; y < dst.cols; y++)
{
ofstream outf("Sample.txt", ios::app);
outf<<"value at "<< x << "  " << y << " = " << dst.at<float>(x,y)<<endl;
}
}

Где dst — матрица, состоящая из типа данных с плавающей точкой

2

Решение

Попробуйте изменить код ниже:

 ofstream outf("vector.txt", ios::app);  // you don't want to open file again and again
for(unsigned int i = 0; i < keypoints.size(); i++)
{
outf<<"value at "<< i << " = " << keypoints.at(i)<<endl;
}
outf.close();

как уже упоминалось @jogojapan, оператор перегрузки<<(..) для OpenCV KeyPoint.

std::ostream& operator<<(std::ostream& out,const KeyPoint& keypoint)
{
// add stream keypoint member by yourself here
out << keypoint.size;
out << keypoint.angle;
out << keypoint.response;
out << keypoint.octave;
out << keypoint.class_id;
return out;
}
2

Другие решения

Сказать: outf << "value at "<< i << " = " << keypoints[i] <<endl;

1

Используя встроенный класс FileStorage, это было так же просто, как добавить две строки. Я напечатал вектор KeyPoints, используя следующие строки:

FileStorage fs("test.xml", FileStorage::WRITE);

fs << "meh" << keypoints;
0
По вопросам рекламы [email protected]