调用PCACompute方法是OpenCV C ++

时间:2019-03-31 09:59:27

标签: c++ opencv

我目前正在处理代码转换问题。原始代码在Python中,我想将其转换为C ++。 Python代码使用功能cv2.PCACompute()。我想知道如何在C ++中调用该函数。更具体地说,我需要传递给cv :: PCACompute函数的输入的类型是什么。我阅读了api参考(https://docs.opencv.org/3.4.3/d2/de8/group__core__array.html#ga4e2073c7311f292a0648f04c37b73781),但仍然无法弄清楚需要传递的数据到底是什么。而且我找不到任何示例。 如果有人可以使用c ++中的函数告诉我或给我一个示例,那将是很棒的。

1 个答案:

答案 0 :(得分:0)

cv::PCAComputePCA::operator ()的包装:https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html?highlight=cv2.pcacompute#pca-operator

有一个tutorial展示了如何使用opencv进行PCA,但未使用PCACompute

看代码,注意几行

//Perform PCA analysis
PCA pca_analysis(data_pts, Mat(), PCA::DATA_AS_ROW);

前两个参数类似于cv::PCACompute。第一个是数据矩阵。第二个是数据的平均值。如果为空,则函数将计算平均值本身。否则,它将使用提供的均值。

cv::PCACompute还将2个数组作为参数,分别用特征向量和特征值填充。最后一个参数是可选参数,可用于保留最大数量的分量。

仍然存在数据布局的问题,该问题在PCA::operator()中进行了明确指定,但是这里没有办法指出。查看cv::PCACompute的实际代码(可以找到here),它将值0传递到PCA::operator()以指示数据布局。查看该枚举here,0表示DATA_AS_ROW,与教程示例一致。