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

Ошибка OpenCV Error: Assertion failed

Recommended Posts

функции

void Roia(IplImage* img,int x,int y)

{

						IplImage* fra=0;

						fra = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );

						 cvConvertImage(img,fra);

						 cv::Mat tr=fra;

						 for( int i=x-5;i<x+5;i++)

						 {

							for( int j=y-5;j<y+5;j++)

							{

							q[ii]=tr.at<uchar>(i,120)+q[ii];

							}

							};

						 q[ii]=q[ii]/100;

						 ~cv::Mat(tr);


}

// обработчик событий от мышки

void myMouseCallback( int event, int x, int y, int flags,void* param )

{

        IplImage* img = (IplImage*) param;


        switch( event ){

                case CV_EVENT_MOUSEMOVE: 

                        break;


                case CV_EVENT_LBUTTONDOWN:

                        printf("%d x %d\n", x, y);

						Roia(img,x,y);

						xx[ii]=x; yy[ii]=y;  

						ii=ii+1;

                        break;


                case CV_EVENT_LBUTTONUP:

                        break;

        }

}
Идёт видео, я нажимаю на окно, по клику мышки функция cvSetMouseCallback( "capture", myMouseCallback, (void*) frame); определяет координаты клика и вызывает Roia(img,x,y), которая считает среднее значение цвета. После пятого нажатия мышки вылетает ошибка, необработаное исключение, в консоли пишет:
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)si

ze.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channel

s()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3

) - 1))*4) & 15) == elemSize1()) in unknown function, file C:\1\opencv\build\inc

lude\opencv2/core/mat.hpp, line 552
и ссылается на:
template<typename _Tp> inline _Tp& Mat::at(int i0, int i1)

{

    CV_DbgAssert( dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] &&

        (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) &&

        CV_ELEM_SIZE1(DataType<_Tp>::depth) == elemSize1());

    return ((_Tp*)(data + step.p[0]*i0))[i1];

}

в файле Mat.hpp

__________________________________

В чём может быть собака?

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


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

Может быть лучше перевести все на cv::Mat или IplImage, а не мешать их, иначе получается ерунда всякая:

Создаете IplImage

fra = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 1 );
а освобождаете cv::Mat, кстати, его или не освобождают явно (деструктор вызывается при выходе из блока), или используют метод release();
~cv::Mat(tr);

Что касается отладки, то посмотрите стек вызовов, там выберите наиболее адекватное ситуации место (формат: название файла; название функции; строка с ошибкой):

post-1-0-58061400-1350816955_thumb.png

Отладчик выбросит вас в это место. Дальше посмотрите значения переменных.

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


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

                                                 for( int i=x-5;i<x+5;i++)

                                                 {

                                                        for( int j=y-5;j<y+5;j++)

                                                        {

                                                        q[ii]=tr.at<uchar>(i,120)+q[ii];

                                                        }

                                                        };

проблема была в том, что координаты в этом месте вылезали иногда за пределы рисунка...

запутался в ориентации по Cv::Mat

там не (x,y) а (y,x)

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×