здравствуйте!я устал шарить по интернету, посмотрел, тут вроде всем помогают очень хорошо! вообщем есть код! запускаем, жмём на энтер для того чтобы запомнился фон! потом инородные объекты программа выделяет синим цветом! вообщем любые изменения по сравнению с фоном программа показывает синим цветом!и вот мне нужно чтобы предмет который задержался в кадре на 10 секунд к примеру выделять контуром(прямоугольником). ну и дальше думаю сделать чтобы сохранялся кадр в папку с подписью. #include <iostream>
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char** argv)
{
//Необходимо подключить камеру
CvCapture* capture = 0;
capture = cvCaptureFromCAM(0);
if (!capture) return 1;
cvNamedWindow( "Motion", 1 );
IplImage* image;
CvScalar color;
CvPoint cv1;
CvFont font;
cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX, 1.3f,1.3f,0,1, 8 );
cv1.x=70; cv1.y=120;
color = CV_RGB(24,0,24);
int i,j;
for(;;)
{
IplImage* image1;
if( !cvGrabFrame( capture ))
break;
image1 = cvRetrieveFrame( capture );
cvPutText( image1, "Press, when you ready", cv1, &font, color );
cvShowImage( "Motion", image1);
if( cvWaitKey(10) >= 0 ) break;
}
//обучаем фон
image = cvRetrieveFrame( capture );
cvShowImage( "Motion", image);
//Теперь надо посчитать m для каждых
float *m=new float[image->height*image->width*3];
int j1;
uchar* ptr;
for(i=0;i<image->height;i++)
{
for(j=0;j<image->width;j++)
{
for(j1=0;j1<3;j1++)
{
m[(i*image->width+j)*3+j1]=0;
ptr = (uchar*) (image->imageData);
m[(i*image->width+j)*3+j1]+=ptr[j*3+i*image->widthStep+j1];
m[(i*image->width+j)*3+j1]=m[(i*image->width+j)*3+j1]/1;
}
}
}
//Раз запомнили - можно входить в цикл обработки изображений
float porog=60.0;
float k=0;
for(;;)
{
IplImage* image1;
if( !cvGrabFrame( capture ))
break;
image1 = cvRetrieveFrame( capture );
ptr = (uchar*) (image1->imageData);
for(i=0;i<image->height;i++)
{
for(j=0;j<image->width;j++)
{
k=0;
for(j1=0;j1<3;j1++)
k+=abs(m[(i*image1->width+j)*3+j1]-ptr[j*3+i*image1->widthStep+j1]);
if (k>=porog)
{
for(j1=0;j1<3;j1++)
{
if (j1==0) ptr[j*3+i*image1->widthStep+j1]=255;
else ptr[j*3+i*image1->widthStep+j1]=100;
}
}
}
}
cvShowImage( "Motion", image1);
if( cvWaitKey(10) >= 0 ) break;
}
//Удаляем все
cvReleaseCapture( &capture );
cvDestroyWindow( "Motion" );
delete m;
}