Странное поведение с OpenCV - PullRequest
2 голосов
/ 27 января 2009

Когда я компилирую свое приложение Windows (называемое CrosslinesDetection) в Visual C ++ 2005, включая OpenCV 1.1, библиотеку компьютерного зрения, я не получаю никаких ошибок компиляции или ссылки, но когда я запускаю его, он достигает точки и завис и Windows говорит следующее:

"Unhandled exception at 0x7c915223 in CrosslinesDetection.exe:
0xC0000005: Access violation writing location 0x00030ffc."

Программа представляет собой обычное приложение C ++ для Windows с двумя строками кода OpenCV:

IplImage *img = cvCreateImage( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1 );
cvReleaseImage( &img );

Странное поведение сейчас, если я - включить строки OpenCV, программа выдает исключение - исключить строки OpenCV, программа работает нормально.

Я без проблем использовал библиотеки OpenCV в другом проекте. В частности, я создал проект C # для GUI и проект C ++, скомпилированный как DLL в фоновом режиме. Если я создаю такое решение для приведенных выше строк, у меня не возникает проблем во время выполнения.

Кто-нибудь знает, что может вызвать эту ошибку?

Спасибо за любую помощь, Стефан


Спасибо за комментарии.

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

Я до сих пор не до конца понимаю проблему, но между тем я выяснил, что исключение происходит, когда я включаю стороннюю библиотеку (от uEye).

Если я использую одну функцию из OpenCV и из библиотеки uEye в проекте, возникает исключение. Если я использую одну функцию из OpenCV или uEye, исключение не выдается. Таким образом, эти библиотеки кажутся несовместимыми, или есть другая проблема. Однако я не знаю, как это обнаружить.


Нет, не сейчас. В минимальном примере функции не связаны. Одна функция инициализирует камеру, а другая - инициализирует структуру изображения.


Но, возможно, ошибка в другом месте ...

Я создал в Visual Studio приложение Windows Form C ++. Я добавил в форму кнопку и соответствующую функцию в файле Form1.h:

private: System::Void Form1_Click(System::Object^  sender, System::EventArgs^  e) {
  OpenCamera();
  IplImage * img = cvCreateImageHeader( cvSize( 1024, 768 ), IPL_DEPTH_8U, 1);
  cvReleaseImage( &img );
  CloseCamera();
}

И я добавил headeras в начале Form1.h:

#include "CameraControl.h"
#include "cv.h"

Затем мне пришлось отключить предварительно скомпилированный заголовок, и мне пришлось перейти с / clr: pure на / clr, чтобы успешно скомпилировать и связать проект.

Но, затем я запускаю программу, выброшенное выше исключение ...

Мне интересно, если я неправильно использую приложение Windows Form Form C ++, и мне не следует включать мой чистый код C ++ или действительно есть проблема с OpenCV или библиотекой uEye.

Ответы [ 3 ]

1 голос
/ 28 января 2009

Я бы предложил протестировать этот же код в собственном проекте, без управляемого кода. Либо MFC, либо консольное приложение Win32.

0 голосов
/ 28 января 2009

Я только что запустил и скомпилировал эти точные строки в OpenCV 1.0 и Visual Studio 2008 без ошибок. Может быть, попробуйте создать пустой проект, который больше ничего не делает, кроме заголовка cxcore.h, а затем запускает эти две строки.

Также просто к другому постеру: амперсанд не является частью спецификации, он там прав. Извините, я бы оставил это как комментарий, но пока не могу.

0 голосов
/ 28 января 2009

Не правда ли

cvReleaseImage( img );

? (амперсанд удален) Кроме того, вы должны проверить правильное соглашение о вызовах.

...