Jump to content
Compvision.ru
Sign in to follow this  
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

__________________________________

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

Share this post


Link to post
Share on other sites

Может быть лучше перевести все на 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

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

Share this post


Link to post
Share on other sites

                                                 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)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×