- Код: Выделить всё • Развернуть
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <time.h>
#pragma comment(lib,"highgui.lib" )
#pragma comment(lib,"cv.lib" )
#pragma comment(lib,"cxcore.lib" )
void main (void)
{
IplImage *src, *tmp;
CvSeq* contour = 0;
cvNamedWindow( "test",1 );
cvNamedWindow( "test1",1 );
cvNamedWindow( "test2",1 );
CvCapture *cap = cvCaptureFromCAM(0);
for(;;){
tmp = cvQueryFrame(cap);
cvShowImage( "test1",tmp );
// у меня 640х480 если у вас меньше то следующий 6 строк заремарьте и все будет работать идеально. Сдесь я делаю сглаживание
// потому что мая камера очень далека от идеала и шумы не позволяют чтото видеть
IplImage *pyr = cvCreateImage( cvSize(320,240),8,3 );
cvPyrDown( tmp, pyr, 7 );
cvPyrUp( pyr, tmp, 7 );
cvReleaseImage( &pyr );
cvShowImage( "test2",tmp );
src = cvCreateImage( cvGetSize(tmp),tmp->depth,1 );
int COI = cvGetImageCOI( tmp );
cvSetImageCOI( tmp,2 );
cvCopy( tmp,src,0 );
cvSetImageCOI( tmp,COI );
cvCanny( src,src,30,70,3 );
cvDilate( src,src,0,1 );
cvErode( src,src,0,1 );
cvZero( tmp );
CvMemStorage* contour_storage = cvCreateMemStorage(0);
CvContourScanner blobs = cvStartFindContours( src, contour_storage, sizeof(CvContour), CV_RETR_CCOMP,CV_CHAIN_APPROX_NONE );
while( (contour=cvFindNextContour(blobs)) != NULL ){
CvScalar outer = CV_RGB( 0, 255, 255 );
CvScalar inner = CV_RGB( 255, 255, 255 );
cvDrawContours( tmp, contour, outer, inner, 0, 0 );
}
contour = cvEndFindContours( &blobs );
cvReleaseMemStorage( &contour_storage );
cvShowImage( "test",tmp );
cvWaitKey(1);
cvReleaseImage( &src );
}
/* Releases contour scanner and returns pointer to the first outer
contour */
cvReleaseCapture( &cap );
return;
}
Выяснилось что на вебкамерах лучше чем на тв-тюнерах. Нет интерлейсинга. Всеже при быстром движении получается лажа. Сейчас бьюсь над проблемой осознания обьекта. Следующий этап замер расстояния до него по предыдущим кадрам.