вызов метода PCACompute выполняется на OpenCV C

#c #opencv

#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:

cv::PCACompute является ли оболочка поверх PCA::operator () :https://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html ?выделите=cv2.pcacompute#pca-оператор

Существует руководство, показывающее, как выполнить PCA с opencv, но оно не использует PCACompute .

Просматривая код, обратите внимание на строки

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

Первые два параметра аналогичны cv::PCACompute . Первый из них — это матрица данных. Второй метод является средним значением данных. Если он пуст, как здесь, функция сама вычислит среднее значение. В противном случае он будет использовать предоставленное среднее значение.

cv::PCACompute в качестве параметров также принимает 2 массива, которые будут заполнены собственными векторами и собственными значениями соответственно. Последний параметр является необязательным и может использоваться для сохранения максимального количества компонентов.

По-прежнему существует проблема с расположением данных, которая явно указана в PCA::operator() , но здесь нет способа указать это. Глядя на фактический код для cv::PCACompute , который можно найти здесь, он передает значение 0 в PCA::operator() , чтобы указать расположение данных. Глядя на это перечисление здесь, 0 означает DATA_AS_ROW , что согласуется с примером из учебника.