portation: opencv 2.4.3 -> opencv 3.1., cvGetMat не был объявлен в этой области - PullRequest
0 голосов
/ 27 мая 2018

В настоящее время я пытаюсь перенести код, основанный на opencv 2.x, на opencv 3.x (выше 3.1).В этом коде используется функция, а именно cvGetMat (...).Так как эта функция не существует в opencv 3.x, мне нужна правильная замена.Кто-нибудь знает, как правильно заменить эту функцию?Я уже искал это как в документации opencv, так и здесь в stackoverflow, но ничего не смог найти.

Вот фрагмент кода с использованием этой функции

void cvCanny3(  const void* srcarr, void* dstarr,
            void* dxarr, void* dyarr,
            int aperture_size )
{


CvMat srcstub, *src = cvGetMat( srcarr, &srcstub );
CvMat dststub, *dst = cvGetMat( dstarr, &dststub );

CvMat dxstub, *dx = cvGetMat( dxarr, &dxstub );
CvMat dystub, *dy = cvGetMat( dyarr, &dystub );
...
...
...
}

Когда я запускаю этот код, япросто получите следующую ошибку, как и ожидалось: 'cvGetMat' не был объявлен в этой области CvMat srcstub, * src = cvGetMat (srcarr, & srcstub);^ ~~~~~~~

1 Ответ

0 голосов
/ 27 мая 2018

cvGetMat из старого интерфейса на основе C (он создает объект CvMat из необработанного массива C), вы должны преобразовать свой код в более новый интерфейс C ++ и заставить его использовать тип cv::Mat (обернуть ваш массив src_addr CC ++ cv::Mat instance).

Например, ваш вызов cvGetMat должен быть заменен объявлением переменной cv :: Mat.

cv::Mat src(num_rows, num_cols, src_type, src_arr);

num_rows, num_cols и src_type определяет размер и семантику массива src_arr.Возможно, вам придется добавить модификатор const на ваш src_arr ввод.

См. Справку cv::Mat для получения более подробной информации.

Все cvFunctionNameвызовы обычно имеют свои аналоги C ++ в пространстве имен 'cv ::'.Например, cvRemap станет cv::remap и т. Д.

...