OpenCV PCA项目返回cv :: Mat只有1列

时间:2015-08-06 12:14:21

标签: opencv pca

尝试压缩一些图像描述符时遇到一些困难,请举例:

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <opencv2/core.hpp>


int main(int argc, char *argv[])
{
    // create some random descriptor 1 rows x 10 cols and populate with some data
    const cv::Mat A = (cv::Mat_<float>(1,10) << 0, -1.5f, -2.f, -3.5f, -3.f, -5.f, -2.f, -2.f, 0, -1.f);
    std::cout << "DESCRIPTOR A : " << std::endl << A << std::endl;

    // create PCA and pass descriptor data with no mean and 6 max components
    cv::PCA pca(A, cv::Mat(), CV_PCA_DATA_AS_ROW, 6);

    // project A to compressed descriptor B (expecting 1 rows x 6 cols)
    const cv::Mat B = pca.project(A);
    std::cout << "DESCRIPTOR B : " << std::endl << B << std::endl;

    return EXIT_SUCCESS;
}

输出:

DESCRIPTOR A : 
[0, -1.5, -2, -3.5, -3, -5, -2, -2, 0, -1]
DESCRIPTOR B : 
[0]

我得到PCA尝试转换坐标系以表示维度较小的值,这是使用所有可用的描述符完成的吗?即PCA类是否需要使用所有描述符构造?如果是这样,如果他们不知道怎么办?

注意:使用OpenCV 3.0.0 附加说明:在我的实际代码中,描述符的大小为1行x 1000列,但仍然输出[0]

1 个答案:

答案 0 :(得分:0)

PCA找到一个旋转,将第一维中所有样本之间的最大点差放在一起。

单独使用一个样本就无法做任何有意义的事情。

我建议访问图书馆。