Я пытаюсь запустить PCA в наборе данных, который я сохранил в двухмерный вектор из файла следующим образом:
std::vector<std::vector<double> > tmpVec;
while(std::getline(file, numStream))
{
std::istringstream buffer(numStream);
std::vector<double> line((std::istream_iterator<double>(buffer)),
std::istream_iterator<double>());
tmpVec.push_back(line);
i++;
}
Теперь мне нужно запустить PCA для этого, для которого, согласно моему пониманию, мне нужно преобразовать это в тип cv :: Mat. Это делается следующим образом:
cv::Mat dst(row, col, CV_64F, &tmpVec);
И через него я запускаю PCA как:
cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);
Когда я пытаюсь распечатать его на экране после вычисления PCA, я получаю значения мусора.
Мне просто нужно выяснить, как запустить PCA на двумерном двойном векторе.
Любая помощь с этим или указание мне в правильном направлении было бы здорово.
Заранее спасибо.
этот:
cv::PCA pca(dst, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);
ожидает резюме :: Mat с непрерывный данные в качестве входных данных, которые не удовлетворены std::vector<std::vector<double> > tmpVec;
попробуй как:
cv::Mat tmp;
while(std::getline(file, numStream))
{
...
cv::Mat m = cv::Mat(line).t(); // we need a row-vec
tmp.push_back(m);
}
cv::PCA pca(tmp, cv::Mat(), CV_PCA_DATA_AS_ROW, 2);