Инициализация многомерной матрицы с использованием opencv дает ошибку связывания

У меня странная ошибка при использовании opencv в Visual Studio 11. Когда я это делаю:

int sz[]={3,3,3};
T=Mat(3,sz,CV_32F);

или это (2D-матрица инициализирована единицами):

T=Mat::ones(3,3,CV_32F);

все работает нормально

но это (3D-матрица инициализирована единицами):

int sz[]={3,3,3};
T=Mat::ones(3,sz,CV_32F);

дает мне ошибку связывания:

Ошибка 6 error LNK2019: неразрешенный внешний символ "public: static class cv::MatExpr __cdecl cv::Mat::ones(int,int const *,int)"

Почему это? Нужно ли мне связывать что-то дополнительное, когда я инициализирую n-мерные матрицы единицами?


person paghdv    schedule 26.06.2013    source источник


Ответы (1)


Насколько я знаю, метод one создает только 2D-матрицу, если вы хотите инициализировать свою матрицу указанными значениями, вы должны сделать это с помощью конструктора

int sz[]={3,3,3};
T=Mat(3,sz,CV_32F, Scalar::all(1));
person Andrea Riccardi    schedule 26.06.2013
comment
Я также могу сделать вывод об этом из ошибки, но почему ошибка связывания? Может быть, это метод из другого класса? (я так не думаю). Я также не вижу причин, почему это реализовано только для 2D-матриц. - person paghdv; 27.06.2013
comment
Вроде бы в заголовочных файлах объявлен метод cv::Mat::ones(int,int const *,int) для многомерной матрицы, но реализации у него нет, отсюда и ошибка компоновщика - person Andrea Riccardi; 28.06.2013