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

Обработка ошибок в OpenCV 2.0 - как правильно?

Recommended Posts

Доброе утро, коллеги!

Я тут подключаю OpenCV к LabVIEW и столкнулся вот с какой проблемой: если в OpenCV возникает ошибка, то в версии 2.0 генерируется исключение, которое LabVIEW переварить не может и моментально падает. Ну например, я складываю две картинки, а они разного типа или разного размера. В версии 1.0 всё работало - я мог получить код ошибки через cvGetErrStatus (режим устанавливался SetErrMode(CV_ErrModeSilent) ). В версии 2.0 cvGetErrStatus всегда возвращает ноль. Я пробовал также подключить мою собственную calback функцию, но и это не даёт желаемого результата - всё равно генерируется исключение. Технически в моём случае OpenCV подключается через wrapper библиотеку, которая написана на чистом Си. Как в этом случае правильно обрабатывать возникающие ошибки?

Спасибо заранее,

Андрей Дмитриев.

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


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

Для иллюстрации, чтобы было понятнее, что я имею в виду:

вот этот код:

code.png

приводит вот к такому результату:

err.png

что надо сделать, чтобы получить CV_BadImageSize или CV_StsUnmatchedSizes вместо исключения?

Андрей

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


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

На самом деле проблема сидит вот здесь:

error.png

Мне этот "throw" не перехватить ничем, даже SetUnhandledExceptionFilter не может с этим справиться...

Хорошая была библиотека, а теперь ей пользоваться практически невозможно.

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


Ссылка на сообщение
Поделиться на других сайтах
На самом деле проблема сидит вот здесь:

.......

Мне этот "throw" не перехватить ничем, даже SetUnhandledExceptionFilter не может с этим справиться...

Хорошая была библиотека, а теперь ей пользоваться практически невозможно.

Ну исходники же открыты - можно исправить.

P.S. Я пока с версии 1.1 не ухожу, неохота.

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


Ссылка на сообщение
Поделиться на других сайтах
Ну исходники же открыты - можно исправить.

P.S. Я пока с версии 1.1 не ухожу, неохота.

Да это понятно, что можно исправить. Просто в эти дебри лезть очень не хочется, а хочется использовать уже скомпилированные библиотеки "как есть".

Вообще обработка ошибок в OpenCV реализована довольно странно. Почему было просто не вернуть код ошибки через return? А так сдаётся мне, что я поимею кучу проблем с мультипотоковыми приложениями.

Ладно, пошёл я CV_Assert править...

UPD:

Поправил CV_Assert (в первом приближении просто воткнул туда return) - вроде заработало. Завтра переброшу код ошибки через callback и всё должно взлететь.

Странно, что компилятор Micro$oft Studio 8 (2005) не смог слинковать проект (не нашёлся vcomp.lib), а вот интеловский компилятор с задачей справился.

Андрей.

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


Ссылка на сообщение
Поделиться на других сайтах
Странно, что компилятор Micro$oft Studio 8 (2005) не смог слинковать проект (не нашёлся vcomp.lib), а вот интеловский компилятор с задачей справился.
Странно, у меня 2005-я студия поддерживает OpenMP из коробки.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×