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

Необработанное исключение в простенькой программе

Recommended Posts

Привет,еще раз всем.Кто нибудь не мог бы помочь найти ошибку в программе определения взмаха руки?

NB.программа не сложная,код маленький.Все компилируется,но как только начинается захват с камеры-вылетает с ошибкой "Необработанное исключение в "0x7c812afb" в "detect_motion.exe": Исключение Microsoft C++: cv::Exception по адресу 0x0011eae8.." и в консоли пишет:

OpenCV Error^Assertion failed(src.type()==CV_8UC1 || src.type() == CV_32FC1)in unknown function, file..\..\..\..\ocv\opencv\src\cvcorner.cpp line 254

Программа сделана на основе " Управляем презентацией взмахом руки"

по ссылкеМоя ссылка

Файл с программой прикреплен к теме.Использую visual2008

detect_motion.rar

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


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

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

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


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

Не могли бы подсказать как перевести картинку в соответствующие серое одноканальное изображение?

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


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

Создаёшь его через cvCreateImage и копируешь из цветного через cvCvtColor

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


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

Закписываю вайлы бмп в видео файл. всё вроде хорошо, но после 2-3х минут нормальной записи

вылетает

Первый этап обработки исключения в "0x7553b727" в "kurs 8.exe": Исключение Microsoft C++: cv::Exception по адресу 0x001ee02c..

Вот код где вылтеат...

public: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {//таймер записи

cvWriteFrame(writer, img2);

screen();

img1 = cvLoadImage("C:\\Test.bmp");

cvResize(img1, img2);

if(Condition()){timer1->Enabled=false;timer3->Enabled=true;}; // остановка записи ESC

}

В чём говно? и как сиправить?

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


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

Отладчиком пользоваться умеешь?

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


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

Поставь на строку cvWriteFrame(writer, img2); брекпоинт (F9) и иди по одной строке (F10). Попутно наводи мышку на все переменные и смотри их значения. Так ошибки и отлавливают.

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


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

Спасибо! буду пользоваться.

Но пока решил проблему методом тыка...

изменил код на

IplImage* img1 = cvLoadImage("C:\\Test.bmp");

cvResize(img1, img2);

cvWriteFrame(writer, img2);

screen();

cvReleaseImage(&img1);

и вроде пока работает...

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


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

Начало записи и захват первого кадра

IplImage* img1 = cvLoadImage("C:\\Test.bmp");

CvSize size = cvSize(img1->width ,img1->height);

img2 = cvCreateImage( size, img1->depth, img1->nChannels );

cvResize(img1, img2);

try{

writer = cvCreateVideoWriter(filename, CV_FOURCC('X','V','I','D'), fps, size, 1);

} catch(cv::Exception){

timer2->Enabled=false;//остановка таймера инициализации

}

Если кадр(окно программы большое то вылетает

Первый этап обработки исключения в "0x7553b727" в "kurs 8.exe": Исключение Microsoft C++: cv::Exception по адресу 0x0040db24..

Первый этап обработки исключения типа "System.Runtime.InteropServices.SEHException" в приложении kurs 8.exe

хоть я и пробую его обработать траем(хочу что бы при исключения прога сама остановила выполнение без ошибок)

но ошибка всё равно вылетает.

В чём может быть причина?

Как правильно исключение написать?

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×