Ejemplo n.º 1
0
// Look for the centroid of each point with the intensity of the pixel as weight
vector<CvPoint> centroiding(vector<vector<CvPoint3D32f> > points){
	vector<CvPoint> res;
	
	long x;
	long y;
	long intensity;
	
	for (int i = 0; i < points.size(); i++){
		x = 0;
		y = 0;
		intensity = 0;
		for (int j = 0; j < points[i].size(); j++){
			intensity += points[i][j].z;
			x += points[i][j].x * points[i][j].z;
			y += points[i][j].y * points[i][j].z;
		}
		if (intensity != 0){
			x = (int) (x/intensity);
			y = (int) (y/intensity);
		}
		res.push_back(cvPoint((int) x, (int) y));
		// display it
		cvLine(imageObjectHSV, cvPoint((int)x-2,(int)y), cvPoint((int)x+2,(int)y), CvScalar(255,255,255,0));
		cvLine(imageObjectHSV, cvPoint((int)x,(int)y-2), cvPoint((int)x,(int)y+2), CvScalar(255,255,255,0));
		cvLine(imageObjectRGB, cvPoint((int)x-2,(int)y), cvPoint((int)x+2,(int)y), CvScalar(255,255,255,0));
		cvLine(imageObjectRGB, cvPoint((int)x,(int)y-2), cvPoint((int)x,(int)y+2), CvScalar(255,255,255,0));
		cvLine(frameToSave, cvPoint((int)x-2,(int)y), cvPoint((int)x+2,(int)y), CvScalar(255,0,0,0));
		cvLine(frameToSave, cvPoint((int)x,(int)y-2), cvPoint((int)x,(int)y+2), CvScalar(255,0,0,0));
	}
	
	return res;
	
}
void on_mouseclick(int event, int x, int y, int flags, void* param){
	IplImage *image = (IplImage*)param;
	CvFont font;
	cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1, 1);
	uchar* ptr;
	if (event == CV_EVENT_LBUTTONDOWN) {
		ptr = (uchar*)image->imageData + y * image->widthStep + x * 3;
		char text[20];
		sprintf(text, "%d  %d  %d", ptr[0], ptr[1], ptr[2]);
		cvPutText(image, text, cvPoint(x, y), &font, CvScalar(255, 0, 0));
		cvShowImage("Window", image);
	}
}
Ejemplo n.º 3
0
void CvCalibFilter::DrawPoints( CvMat** dstarr )
{
    int i, j;

    if( !dstarr )
    {
        assert(0);
        return;
    }

    if( latestCounts )
    {
        for( i = 0; i < cameraCount; i++ )
        {
            if( dstarr[i] && latestCounts[i] )
            {
                CvMat dst_stub, *dst;
                int count = 0;
                bool found = false;
                CvPoint2D32f* pts = 0;

                GetLatestPoints( i, &pts, &count, &found );

                dst = cvGetMat( dstarr[i], &dst_stub );

                static const CvScalar line_colors[] =
                {
                    CvScalar(0,0,255),
                    CvScalar(0,128,255),
                    CvScalar(0,200,200),
                    CvScalar(0,255,0),
                    CvScalar(200,200,0),
                    CvScalar(255,0,0),
                    CvScalar(255,0,255)
                };

                const int colorCount = sizeof(line_colors)/sizeof(line_colors[0]);
                const int r = 4;
                CvScalar color = line_colors[0];
                CvPoint prev_pt;

                for( j = 0; j < count; j++ )
                {
                    CvPoint pt;
                    pt.x = cvRound(pts[j].x);
                    pt.y = cvRound(pts[j].y);

                    if( found )
                    {
                        if( etalonType == CV_CALIB_ETALON_CHESSBOARD )
                            color = line_colors[(j/cvRound(etalonParams[0]))%colorCount];
                        else
                            color = CV_RGB(0,255,0);

                        if( j != 0 )
                            cvLine( dst, prev_pt, pt, color, 1, CV_AA );
                    }

                    cvLine( dst, cvPoint( pt.x - r, pt.y - r ),
                            cvPoint( pt.x + r, pt.y + r ), color, 1, CV_AA );

                    cvLine( dst, cvPoint( pt.x - r, pt.y + r),
                            cvPoint( pt.x + r, pt.y - r), color, 1, CV_AA );

                    cvCircle( dst, pt, r+1, color, 1, CV_AA );

                    prev_pt = pt;
                }
            }
        }
    }
}
Ejemplo n.º 4
0
void callback(int i)
{
	cvSmooth(frame, imageFiltree, CV_BLUR,seuilFiltre,seuilFiltre,0.0,0.0);
	cvCvtColor(imageFiltree, imageHSV,CV_BGR2HSV);
	cvInRangeS(imageHSV,cvScalar(hmin, smin, vmin, 0.0),cvScalar(hmax, smax, vmax, 0.0),imageBinaire);
	cvErode(imageBinaire, imageErodee, NULL, nbErosions);
	cvDilate(imageErodee, imageDilatee, NULL, nbDilatations);
	
	//imageDilateeFiltree =  lowPassFilter(imageDilatee); FILTRE
	imageObjectRGB = multBinColor(imageDilatee, frame);
	imageObjectHSV = multBinColor(imageDilatee, imageHSV);
	
	// find the centroid of the object and trace it
	int centroid[2] = {0,0};
	centroiding(imageObjectHSV,centroid,2);
	cvLine(imageObjectHSV, cvPoint(centroid[0]-2,centroid[1]), cvPoint(centroid[0]+2,centroid[1]), CvScalar(255,255,255,0));
	cvLine(imageObjectHSV, cvPoint(centroid[0],centroid[1]-2), cvPoint(centroid[0],centroid[1]+2), CvScalar(255,255,255,0));
	cvLine(imageObjectRGB, cvPoint(centroid[0]-2,centroid[1]), cvPoint(centroid[0]+2,centroid[1]), CvScalar(255,255,255,0));
	cvLine(imageObjectRGB, cvPoint(centroid[0],centroid[1]-2), cvPoint(centroid[0],centroid[1]+2), CvScalar(255,255,255,0));
	
	double distance = findDistance(imageObjectHSV, centroid);
	//double distance2 = findDistance2(imageObjectHSV, centroid);
	
	// Contours
	cvFindContours( imageDilatee, storage, &contours, sizeof(CvContour),
				   CV_RETR_LIST, CV_CHAIN_APPROX_NONE, cvPoint(0,0) );
	
	//imageFinale = multiplier(frame/*imageHSV*/, imageDilatee);
	//cvDrawContours( imageFinale, contours,
	cvDrawContours( frame, contours,
				   CV_RGB(255,255,0), CV_RGB(0,255,0),
				   1, 2, 8, cvPoint(0,0));
	
	//cvCvtColor(imageFinale, imageFinale,CV_HSV2BGR);
	
	cvNamedWindow(myWindow, CV_WINDOW_AUTOSIZE);
	cvNamedWindow(myWindowObjectHSV, CV_WINDOW_AUTOSIZE);
	cvNamedWindow(myWindowObjectRGB, CV_WINDOW_AUTOSIZE);
	/*cvResizeWindow(myWindowObjectHSV, 500, 400);
	cvResizeWindow(myWindowObjectRGB, 500, 400);
	cvMoveWindow(myWindowObjectHSV, 0, 0);
	cvMoveWindow(myWindowObjectRGB, 515, 0);*/
	//cvShowImage(myWindow, imageFinale);
	cvShowImage(myWindow, frame);
	cvShowImage(myWindowObjectHSV, imageObjectHSV);
	cvShowImage(myWindowObjectRGB, imageObjectRGB);
	
}
int main()
{ 
	//freopen ("myfile.txt","w",stdout);
	IplImage* background=NULL; //intel image processing libraray
	IplImage* foreground=NULL; 
	IplImage* subtract=NULL; 
	IplConvKernel* element=NULL;
	CvCapture* capture=NULL; //info for reading frames from a camera or a video file
	int counter=0;	
	//show image on screen

	//cvNamedWindow("Video",CV_WINDOW_AUTOSIZE); //CV_WINDOW_AUTOSIZE is the default video size
	cvNamedWindow("Subtract",CV_WINDOW_AUTOSIZE);
	//cvNamedWindow("Contour",CV_WINDOW_AUTOSIZE);
	IplImage* background_gry ;
	IplImage* foreground_gry;
	IplImage* foreground_skipped;
	IplImage* eroded;
	IplImage* dilated;
	IplImage* frame;
	IplImage* audio;

	CvRect rect;
	CvSeq* contours=0;
	CvMemStorage *storage = cvCreateMemStorage(0);
	//float ar;
	//capture = cvCaptureFromCAM(0);
	capture = cvCaptureFromFile("4.avi"); //takes camera ID as argument

	/* if( !capture ) 
	{ 
	printf("Cannot open camera\n"); 
	return -1; 
	}*/
	if(!background) 
	{ 
		for(int i=0;i<50;i++)
		{ 
			background=cvQueryFrame(capture); 
			//takes as its argument a pointer to CvCapture structure
			//grabs next video frame into memory		


			background_gry = cvCreateImage(cvGetSize(background), 8,1); 
			// parameters are size, depth and channels
			//size is image height and width
			//depth - bit depth of image elements
			//channel - no of channels per pixel, supports 1-4 channels
			eroded = cvCreateImage(cvGetSize(background), 8, 1);
			dilated = cvCreateImage(cvGetSize(background), 8, 1);
			frame = cvCreateImage(cvGetSize(background), 8, 1);
			cvCvtColor(background, background_gry, CV_RGB2GRAY); 
			// converts one color space(no of channels) to another
			//parameters - input image, output image, color space conversion code
		} 

	} 
	cvWaitKey(150); //wait and stop for a key stroke
	subtract= cvCreateImage( cvGetSize(background), 8, 1);
	IplImage* subtract_gry = cvCreateImage( cvGetSize(background), 8, 1);
	IplImage* subtract_final = cvCreateImage( cvGetSize(background), 8, 1);

while(1) 
{ 
	foreground=cvQueryFrame(capture); 
	//if( !foreground ) break; 
	IplImage* foreground_skipped = cvCreateImage( cvGetSize(foreground), 8, 1);

	if((counter%5)==0)
	{	
		foreground_skipped = foreground;
		//cvNamedWindow("frame", CV_WINDOW_AUTOSIZE);
		//cvShowImage("frame", foreground);
		//cvWaitKey(100);

		foreground_gry= cvCreateImage(cvGetSize(foreground), 8,1);
		cvCvtColor(foreground, foreground_gry, CV_RGB2GRAY);
		//cvShowImage( "Video",foreground_gry); 
		char c = cvWaitKey(30); 
		// for(int j=0;c!=27;j++){ 
		//cvSub(foreground,background,subtract,NULL); 

		cvAbsDiff(foreground_gry,background_gry,subtract); 
		//cvCvtColor(subtract, subtract_gry, CV_RGB2GRAY);
		background_gry = foreground_gry;
		//cvShowImage( "Background", background_gry );
		//double sub_pix= cvGetReal2D(subtract_gry, 150, 100);
		//printf("\n sub= %lf", sub_pix);
		cvThreshold(subtract, subtract_final, 15.0, 255.0, CV_THRESH_BINARY);
		cvErode(subtract_final, eroded, element, 3);
		cvDilate(eroded, dilated, element, 40);

		//defining color for drawing contours
		CvScalar(ext_color);
		ext_color = CV_RGB(rand()&255, rand()&255, rand()&255);
		//finding contours for the subtracted image 
		cvFindContours(dilated, storage, &contours, sizeof(CvContour),CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));

		//drawing the contours
//		for (; contours != 0; contours = contours->h_next)
		if (contours != 0)
		{
			cvDrawContours(dilated, contours, ext_color, CV_RGB(4,2,1), -1, 2, 8);
			rect = cvBoundingRect(contours, 0); //extract bounding box for current contour
			//drawing rectangle

			if( (rect.height * rect.width) < 10000)
			{
				contours = contours->h_next;
			}	
			else
			{
				cvRectangle(background, cvPoint(rect.x, rect.y), cvPoint(rect.x+rect.width, rect.y+rect.height), cvScalar(0, 50, 255, 0), 10, 4, 0); 
				//float ar = rect.x/rect.y;	
				float ar = (rect.width-rect.x)/(rect.height-rect.y);
				printf("\n%2f",ar);
				printf("\t\t");

				//float er = 786432/(((rect.x+rect.width))*((rect.y+rect.height)));
				//printf("%2f\n",er);
				//printf("\t\t\t");


				float w,v,y,d;
				float dif=200,cvr;
				v=0.5;
				d = pow(rect.width,2.0)+pow(rect.height,2.0);
				w=pow(d,v);
				y=w/2;
				
				cvr=dif-y;
				printf("%f\t\t%f\n",y,cvr);
				dif = y;


				for(int i=0;i<3;i++)
				{
					if(ar<-15)
				  	{
						if(cvr<-75)
						{
							//if(rect.width<rect.height)
							//{
								printf("Fall detected \n");
								
								//system("CSmtp.exe");
								
								//PlaySound(TEXT("ring.avi"), NULL, SND_SYNC);
								
								
							//}
						}
					}
				}
			}
		
		//cvBoundingRect(contours,0);
		cvShowImage("Subtract",background); 
		
		//cvShowImage("video",background);
		cvWaitKey(2);
		// } 
		if( c == 27 ) break; 
	}
	}
counter++;
}

cvReleaseCapture( &capture ); 
//cvDestroyWindow("Background"); 
cvDestroyWindow("Video"); 
cvDestroyWindow("Subtract"); 
cvReleaseMemStorage(&storage);
return 0;
}
Ejemplo n.º 6
0
    void draw()
    {
        double scale = this->scale == 0? 1.0 : this->scale;
        CvScalar colors[5] = {
#if !defined CV_VERSION_EPOCH && (CV_VERSION_MAJOR >= 3)
            CvScalar(cvRound(color[0].r * 255), cvRound(color[0].g * 255), cvRound(color[0].b * 255), cvRound(alpha * 255)),
            CvScalar(cvRound(color[1].r * 255), cvRound(color[1].g * 255), cvRound(color[1].b * 255), cvRound(alpha * 255)),
            CvScalar(cvRound(color[2].r * 255), cvRound(color[2].g * 255), cvRound(color[2].b * 255), cvRound(alpha * 255)),
            CvScalar(cvRound(color[3].r * 255), cvRound(color[3].g * 255), cvRound(color[3].b * 255), cvRound(alpha * 255)),
            CvScalar(cvRound(color[4].r * 255), cvRound(color[4].g * 255), cvRound(color[4].b * 255), cvRound(alpha * 255)),
#else
            {{cvRound(color[0].r * 255), cvRound(color[0].g * 255), cvRound(color[0].b * 255), cvRound(alpha * 255)}},
            {{cvRound(color[1].r * 255), cvRound(color[1].g * 255), cvRound(color[1].b * 255), cvRound(alpha * 255)}},
            {{cvRound(color[2].r * 255), cvRound(color[2].g * 255), cvRound(color[2].b * 255), cvRound(alpha * 255)}},
            {{cvRound(color[3].r * 255), cvRound(color[3].g * 255), cvRound(color[3].b * 255), cvRound(alpha * 255)}},
            {{cvRound(color[4].r * 255), cvRound(color[4].g * 255), cvRound(color[4].b * 255), cvRound(alpha * 255)}},
#endif
        };
        
        for (int i = 0; i < (objects ? objects->total : 0); i++)
        {
            CvRect* r = (CvRect*) cvGetSeqElem(objects, i);
            CvPoint center;
            int thickness = stroke <= 0? CV_FILLED : cvRound(stroke * 100);
            int linetype = antialias? CV_AA : 8;
            
            center.x = cvRound((r->x + r->width * 0.5) / scale);
            center.y = cvRound((r->y + r->height * 0.5) / scale);
            
            switch (shape == 1.0? (rand() % 3) : cvRound(shape * 10))
            {
            default:
            case 0:
                {
                    int radius = cvRound((r->width + r->height) * 0.25 / scale);
                    cvCircle(image, center, radius, colors[i % 5], thickness, linetype);
                    break;
                }
            case 1:
                {
#if !defined CV_VERSION_EPOCH && (CV_VERSION_MAJOR >= 3)
                    CvBox2D box = CvBox2D(CvPoint2D32f(center.x, center.y), CvSize2D32f(r->width / scale, (r->height / scale) * 1.2), 90);
#else
                    CvBox2D box = {{center.x, center.y}, {r->width / scale, (r->height / scale) * 1.2}, 90};
#endif
                    cvEllipseBox(image, box, colors[i % 5], thickness, linetype);
                    break;
                }
            case 2:
                {
#if !defined CV_VERSION_EPOCH && (CV_VERSION_MAJOR >= 3)
                    CvPoint pt1 = CvPoint(r->x / scale, r->y / scale);
                    CvPoint pt2 = CvPoint((r->x + r->width) / scale, (r->y + r->height) / scale);
#else
                    CvPoint pt1 = {r->x / scale, r->y / scale};
                    CvPoint pt2 = {(r->x + r->width) / scale, (r->y + r->height) / scale};
#endif
                    cvRectangle(image, pt1, pt2, colors[i % 5], thickness, linetype);
                    break;
                }
            }
        }
    }