Я использую функцию OpenCV remap, как показано ниже:

Mat lg,lr;
Mat *mxl = (Mat *) cvLoad("mx1.xml");
Mat *myl = (Mat *) cvLoad("my1.xml");
remap(lg, lr, mxl, myl);

mx1 и my1 загружаются как cv::Mat, но remap требует cv::_InputArray, как мне этого добиться?

1
ria15 26 Июл 2013 в 11:05

1 ответ

Лучший ответ

cv::_InputArray - это тип прокси, используемый OpenCV для приема нескольких типов данных (например, cv::Mat или std::vector) в качестве входных данных. Вам не нужно создавать его напрямую.

Отчасти ваша проблема в том, что вы пытаетесь смешивать API C и C ++. Это не рекомендуется. Другой фактор заключается в том, что cv::Mat* нельзя преобразовать в InputArray. Вы можете использовать cv::FileStorage для чтения файлов в объекты cv::Mat:

cv::Mat lg, lr;
cv::FileStorage fs1("mx1.xml", cv::FileStorage::READ);
cv::FileStorage fs2("mx2.xml", cv::FileStorage::READ);

cv::Mat mxl;
cv::FileNode fn = fs1.getFirstTopLevelNode();
fn >> mxl;

cv::Mat myl;
fn = fs2.getTopLevelNode();
fn >> myl;

cv::remap(lg, lr, mxl, myl, CV_INTER_LINEAR);
2
Aurelius 15 Июл 2014 в 03:56
Использование OpenCV 2.4.8 - похоже, getTopLevelNode был переименован в getFirstTopLevelNode.
 – 
Kozuch
15 Июл 2014 в 03:01