在std :: vector中使用所有cv :: Mat并有效地更改它们的值

时间:2017-03-21 12:31:08

标签: c++ opencv image-processing pca

我有一个具有相同列数的矩阵向量,即std::vector<cv::Mat> v,我想使用所有这些来应用cv::PCA(没有降维)。最后,我希望结果也适用于原始矩阵。

代码说,这是我到目前为止唯一的解决方案:

std::vector<cv::Mat> v;
//fill v
cv::Mat bigMat;
for(size_t i=0; i<v.size(); i++)
  bigMat.push_back(v[i]);
cv::PCA pca(bigMat, cv::Mat(), CV_PCA_DATA_AS_ROW);
for(size_t i=0; i<v.size(); i++)
  bigMat = pca.project(bigMat);

但这不会影响v[i]。我怎样才能有效地做到这一点?请注意,我必须稍后使用bigMat的预计版本。这是我想到的唯一解决方案:

cv::PCA pca(bigMat, cv::Mat(), CV_PCA_DATA_AS_ROW);
bigMat.release();
for (size_t i=0; i<v.size(); i++){
  v[i] = pca.project(v[i]);
  bigMat.push_back(v[i]);
}

但这有点难看,我也不知道效率如何。有没有更好的解决方案(效率是首要任务)?

如果你徘徊,v[i]i-th图像的描述符集。如果您问自己为什么我的PCA中没有降低维数,请查看this论文。

0 个答案:

没有答案