Вопрос по – OpenCV InputArray / OutputArray

6

Я только что скомпилировал последнюю версию OpenCV 2.3. И их решение изменить весь ввод / вывод Matrix на InputArray / OutputArray все испортило. Тот же фрагмент кода, который хорошо работал в OpenCV 2.2, теперь бесполезен.

Я бы принял два решения:

Показывая мне, где я могу скачать OpenCV 2.2 для Linux со всеми модулями, важно, чтобы швы не пропали (я пытался найти подходящий, но шить всегда отсутствует!).

Помогите мне решить, что я описываю ниже.

OpenCV 2.4, даже если он все еще бета, исправил это, и я должен вместо этого перейти на эту версию!

У меня есть это сообщение об исключении:

<code>OpenCV Error: Assertion failed (k == STD_VECTOR_MAT) in getMat, file /home/widgg/opencv/trunk/modules/core/src/matrix.cpp, line 928
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/widgg/opencv/trunk/modules/core/src/matrix.cpp:928: error: (-215) k == STD_VECTOR_MAT in function getMat
</code>

В GDB это стек:

<code>#0  0x00007ffff5df3445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff5df6bab in __GI_abort () at abort.c:91
#2  0x00007ffff674169d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff673f846 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff673f873 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff673f96e in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff77fca51 in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.3
#7  0x00007ffff791306d in cv::_InputArray::getMat(int) const () from /usr/local/lib/libopencv_core.so.2.3
#8  0x00007ffff796064c in cv::perspectiveTransform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_core.so.2.3
</code>

, наконец, вот мой код, когда я вызываю cv ::pectiveTransform:

<code>std::vector<cv::Point2f> corners(4);

cv::Mat cur_image = imread("my_image.jpg");

std::vector<cv::Point2f> img_corners(4);

img_corners[0] = cv::Point2f(0, 0);

img_corners[1] = cv::Point2f(cur_image.cols, 0);

img_corners[2] = cv::Point2f(cur_image.cols, cur_image.rows);

img_corners[3] = cv::Point2f(0, cur_image.rows);

cur_image.release();

cv::perspectiveTransform(img_corners, corners, m_transf);
</code>

And cv :: Mat m_transf = (Mat_ <double> (3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1); это его значение при первом использовании, и оно падает в этом месте!

У меня похожая проблема с cv :: FindHomography. Дело в том, что вчера код выполнялся правильно, а теперь эта штука InputArray / OuputArray все испортила.

Это очень раздражает, пожалуйста, помогите!

Также я нашел этот отчет здесь:OpenCV 2.2 против 2,3 и это плохой знак! Для этого должен быть обходной путь!

Ваш Ответ

1   ответ
7

у вас установлены две версии OpenCV, и компоновщик пытается использовать для компоновки другую версию, отличную от той, которая использовалась для компиляции вашего кода.

Самый простой способ - удалить все другие версии OpenCV, и тогда возможный неправильный путь к библиотеке будет более явным (somelib.so отсутствует)

Или проверьте все настройки PATH, флаги компоновщика и папки включения, чтобы убедиться, что вы используете ту же версию, выполнив шаги include / complile / link

Спасибо, я проверю это сегодня вечером и дам тебе знать! widgg
Спасибо, это решило проблему с библиотекой! Я удалил все экземпляры OpenCV, которые у меня были, и только что сделал make install, чтобы поместить нужную мне версию! widgg
Не стесняйтесь принять ответ. Sam
это не полный ответ, и мне придется повторить этот вопрос еще раз! Но есть ли у вас идеи, чтобы решить это? widgg

Похожие вопросы