188 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifdef _CH_
 | 
						|
#pragma package <opencv>
 | 
						|
#endif
 | 
						|
 | 
						|
#define CV_NO_BACKWARD_COMPATIBILITY
 | 
						|
 | 
						|
#ifndef _EiC
 | 
						|
#include "cv.h"
 | 
						|
#include "highgui.h"
 | 
						|
#include <stdlib.h>
 | 
						|
#include <stdio.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#define NUMBER 100
 | 
						|
#define DELAY 5
 | 
						|
char wndname[] = "Drawing Demo";
 | 
						|
 | 
						|
CvScalar random_color(CvRNG* rng)
 | 
						|
{
 | 
						|
    int icolor = cvRandInt(rng);
 | 
						|
    return CV_RGB(icolor&255, (icolor>>8)&255, (icolor>>16)&255);
 | 
						|
}
 | 
						|
 | 
						|
int main( int argc, char** argv )
 | 
						|
{
 | 
						|
    int line_type = CV_AA; // change it to 8 to see non-antialiased graphics
 | 
						|
    int i;
 | 
						|
    CvPoint pt1,pt2;
 | 
						|
    double angle;
 | 
						|
    CvSize sz;
 | 
						|
    CvPoint  ptt[6];
 | 
						|
    CvPoint* pt[2];
 | 
						|
    int  arr[2];
 | 
						|
    CvFont font;
 | 
						|
    CvRNG rng;
 | 
						|
    int width = 1000, height = 700;
 | 
						|
    int width3 = width*3, height3 = height*3;
 | 
						|
    CvSize text_size;
 | 
						|
    int ymin = 0;
 | 
						|
    // Load the source image
 | 
						|
    IplImage* image = cvCreateImage( cvSize(width,height), 8, 3 );
 | 
						|
    IplImage* image2;
 | 
						|
 | 
						|
    // Create a window
 | 
						|
    cvNamedWindow(wndname, 1 );
 | 
						|
    cvZero( image );
 | 
						|
    cvShowImage(wndname,image);
 | 
						|
    cvWaitKey(DELAY);
 | 
						|
 | 
						|
    rng = cvRNG((unsigned)-1);
 | 
						|
    pt[0] = &(ptt[0]);
 | 
						|
    pt[1] = &(ptt[3]);
 | 
						|
 | 
						|
    arr[0] = 3;
 | 
						|
    arr[1] = 3;
 | 
						|
 | 
						|
    for (i = 0; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt1.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt1.y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt2.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt2.y=cvRandInt(&rng) % height3 - height;
 | 
						|
 | 
						|
        cvLine( image, pt1, pt2, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for (i = 0; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt1.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt1.y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt2.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt2.y=cvRandInt(&rng) % height3 - height;
 | 
						|
 | 
						|
        cvRectangle( image,pt1, pt2, random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for (i = 0; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt1.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt1.y=cvRandInt(&rng) % height3 - height;
 | 
						|
        sz.width =cvRandInt(&rng)%200;
 | 
						|
        sz.height=cvRandInt(&rng)%200;
 | 
						|
        angle = (cvRandInt(&rng)%1000)*0.180;
 | 
						|
 | 
						|
        cvEllipse( image, pt1, sz, angle, angle - 100, angle + 200,
 | 
						|
                   random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for (i = 0; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt[0][0].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[0][0].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[0][1].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[0][1].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[0][2].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[0][2].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[1][0].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[1][0].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[1][1].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[1][1].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[1][2].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[1][2].y=cvRandInt(&rng) % height3 - height;
 | 
						|
 | 
						|
        cvPolyLine( image, pt, arr, 2, 1, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for (i = 0; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt[0][0].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[0][0].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[0][1].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[0][1].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[0][2].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[0][2].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[1][0].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[1][0].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[1][1].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[1][1].y=cvRandInt(&rng) % height3 - height;
 | 
						|
        pt[1][2].x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt[1][2].y=cvRandInt(&rng) % height3 - height;
 | 
						|
 | 
						|
        cvFillPoly( image, pt, arr, 2, random_color(&rng), line_type, 0 );
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for (i = 0; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt1.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt1.y=cvRandInt(&rng) % height3 - height;
 | 
						|
 | 
						|
        cvCircle( image, pt1, cvRandInt(&rng)%300, random_color(&rng),
 | 
						|
                  cvRandInt(&rng)%10-1, line_type, 0 );
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    for (i = 1; i< NUMBER; i++)
 | 
						|
    {
 | 
						|
        pt1.x=cvRandInt(&rng) % width3 - width;
 | 
						|
        pt1.y=cvRandInt(&rng) % height3 - height;
 | 
						|
 | 
						|
        cvInitFont( &font, cvRandInt(&rng) % 8,
 | 
						|
                    (cvRandInt(&rng)%100)*0.05+0.1, (cvRandInt(&rng)%100)*0.05+0.1,
 | 
						|
                    (cvRandInt(&rng)%5)*0.1, cvRound(cvRandInt(&rng)%10), line_type );
 | 
						|
 | 
						|
        cvPutText( image, "Testing text rendering!", pt1, &font, random_color(&rng));
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX, 3, 3, 0.0, 5, line_type );
 | 
						|
 | 
						|
    cvGetTextSize( "OpenCV forever!", &font, &text_size, &ymin );
 | 
						|
 | 
						|
    pt1.x = (width - text_size.width)/2;
 | 
						|
    pt1.y = (height + text_size.height)/2;
 | 
						|
    image2 = cvCloneImage(image);
 | 
						|
 | 
						|
    for( i = 0; i < 255; i++ )
 | 
						|
    {
 | 
						|
        cvSubS( image2, cvScalarAll(i), image, 0 );
 | 
						|
        cvPutText( image, "OpenCV forever!", pt1, &font, CV_RGB(255,i,i));
 | 
						|
        cvShowImage(wndname,image);
 | 
						|
        if(cvWaitKey(DELAY) >= 0) return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    // Wait for a key stroke; the same function arranges events processing
 | 
						|
    cvWaitKey(0);
 | 
						|
    cvReleaseImage(&image);
 | 
						|
    cvReleaseImage(&image2);
 | 
						|
    cvDestroyWindow(wndname);
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
#ifdef _EiC
 | 
						|
main(1,"drawing.c");
 | 
						|
#endif
 |