Перейти к содержимому
Compvision.ru
ter_nk

ошибка initUndistortRectifyMap

Recommended Posts

в отладчике работает, наверное не так что-то иниицализирую?

    Mat distort_mat, new_instrisic_mat, _dst;
    _dst.create( image.size(), image.type());
    int stripe_size0 = image.rows;

    Mat map1(stripe_size0, image.cols, CV_32FC(1)), map2(stripe_size0, image.cols, CV_32FC(1));

    Mat R = Mat_<double>::eye(3,3);

    Mat_<double> A, Ar;
    intrinsic_Matrix.convertTo(A, CV_64F);

    initUndistortRectifyMap(A, distortion_coeffs2, R, A, map1.size(),  map1.type() , map1, map2);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А описание ошибки добавить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Program terminated with signal 11, Segmentation fault.
#0  0x001f31f0 in cv::getDefaultNewCameraMatrix(cv::_InputArray const&, cv::Size_<int>, bool) ()
   from /usr/local/lib/libopencv_imgproc.so.2.3
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А минимальный код для копипаста воспроизводящий ошибку ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня на этой функции

initUndistortRectifyMap(A, distortion_coeffs2, R, A, map1.size(),  map1.type() , map1, map2);

 

программа падает, выдается ошибка сегментации, под отладчиком проходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программисты очень ленивые занятые люди :)

Если им нужно что то еще приделывать к Вашему коду, чтобы посмотреть в своей любимой IDE в отладчике, и попробовать свои предположения, то это их удручает wink.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1) Тогда укажите какие данные у вас на входе (точно, с типами, размерами), это не понятно по тому куску который вы приводите.

2) Не факт, что Вы правильно инициализировали эти данные.

3) Вероятно, что подключены библиотеки не той конфигурации.

 

Этих всех вопросов можно было бы избежать при правильно сформулированной проблеме.

С минимальным (но полным (скопировал и запустил) ) кодом воспроизводящим ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На входе у меня

Mat image = imread("a.bmp",1);

 

distortion_coeffs и intrinsic_Matrix - это коэффициенты, которые я считавыю из xml

матрица

566.816 0 526.55
0 564.766 362.365
0 0 1

 

коэффициенты другие, в принципе применимы к моему изображению

 

Может я и неправильно инициализировал данные, однако тогда странно, что под отладчиком все не просто работает и не падает, а и исправляет искажения. Библиотеки у меня только одной версии, вообще если быбли быблиотеки другой версии что-то бы посыпалось раньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Библиотеки имеют релизную и отладочную версии и путать их нельзя.

Проверьте, считывается ли изображение.

Выведите его после загрузки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вывожу изображение, в файл сохраняю с исправленной дисторсией под отладчиком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если запускать из IDE то рабочие директории для Debug и Release разные (если не задано обратное)!

И пути в которых программа ищет изображение тоже разные.

 

Проверить можно задав абсолютный путь к изображению. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отлаживаю функцию библиотеки

 

initUndistortRectifyMap( InputArray _cameraMatrix, InputArray _distCoeffs,
                              InputArray _matR, InputArray _newCameraMatrix,
                              Size size, int m1type, OutputArray _map1, OutputArray _map2 )

 

спотыкается на

CV_Assert( A.size() == Size(3,3) && A.size() == R.size() );

 

и справедливо, поскольку А = Mat_<double>(cameraMatrix)

 

у меня она 3х3 R = Mat_<double>::eye(3,3);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

CV_Assert выбрасывает ошибку когда условие в скобках НЕ выполнено.

Выведите в консоль размеры матриц.

cout << A << endl;
cout << R << endl;
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо, дело было в путях, что-то проверил, а что-то забыл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×