#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
, что согласуется с примером из учебника.