00001 #ifdef _CH_
00002 #pragma package <opencv>
00003 #endif
00004
00005 #ifndef _EiC
00006 #include "cv.h"
00007 #include "highgui.h"
00008 #include <stdlib.h>
00009 #include <stdio.h>
00010 #endif
00011
00012 #define NUMBER 100
00013 #define DELAY 5
00014 char wndname[] = "Drawing Demo";
00015
00016 CvScalar random_color(CvRNG* rng)
00017 {
00018 int icolor = cvRandInt(rng);
00019 return CV_RGB(icolor&255, (icolor>>8)&255, (icolor>>16)&255);
00020 }
00021
00022 int main( int argc, char** argv )
00023 {
00024 int line_type = CV_AA;
00025 int i;
00026 CvPoint pt1,pt2;
00027 double angle;
00028 CvSize sz;
00029 CvPoint ptt[6];
00030 CvPoint* pt[2];
00031 int arr[2];
00032 CvFont font;
00033 CvRNG rng;
00034 int width = 1000, height = 700;
00035 int width3 = width*3, height3 = height*3;
00036 CvSize text_size;
00037 int ymin = 0;
00038
00039 IplImage* image = cvCreateImage( cvSize(width,height), 8, 3 );
00040 IplImage* image2;
00041
00042
00043 cvNamedWindow(wndname, 1 );
00044 cvZero( image );
00045 cvShowImage(wndname,image);
00046
00047 rng = cvRNG((unsigned)-1);
00048 pt[0] = &(ptt[0]);
00049 pt[1] = &(ptt[3]);
00050
00051 arr[0] = 3;
00052 arr[1] = 3;
00053
00054 for (i = 0; i< NUMBER; i++)
00055 {
00056 pt1.x=cvRandInt(&rng) % width3 - width;
00057 pt1.y=cvRandInt(&rng) % height3 - height;
00058 pt2.x=cvRandInt(&rng) % width3 - width;
00059 pt2.y=cvRandInt(&rng) % height3 - height;
00060
00061 cvLine( image, pt1, pt2, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );
00062 cvShowImage(wndname,image);
00063 cvWaitKey(DELAY);
00064 }
00065
00066 for (i = 0; i< NUMBER; i++)
00067 {
00068 pt1.x=cvRandInt(&rng) % width3 - width;
00069 pt1.y=cvRandInt(&rng) % height3 - height;
00070 pt2.x=cvRandInt(&rng) % width3 - width;
00071 pt2.y=cvRandInt(&rng) % height3 - height;
00072
00073 cvRectangle( image,pt1, pt2, random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );
00074 cvShowImage(wndname,image);
00075 cvWaitKey(DELAY);
00076 }
00077
00078 for (i = 0; i< NUMBER; i++)
00079 {
00080 pt1.x=cvRandInt(&rng) % width3 - width;
00081 pt1.y=cvRandInt(&rng) % height3 - height;
00082 sz.width =cvRandInt(&rng)%200;
00083 sz.height=cvRandInt(&rng)%200;
00084 angle = (cvRandInt(&rng)%1000)*0.180;
00085
00086 cvEllipse( image, pt1, sz, angle, angle - 100, angle + 200,
00087 random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );
00088 cvShowImage(wndname,image);
00089 cvWaitKey(DELAY);
00090 }
00091
00092 for (i = 0; i< NUMBER; i++)
00093 {
00094 pt[0][0].x=cvRandInt(&rng) % width3 - width;
00095 pt[0][0].y=cvRandInt(&rng) % height3 - height;
00096 pt[0][1].x=cvRandInt(&rng) % width3 - width;
00097 pt[0][1].y=cvRandInt(&rng) % height3 - height;
00098 pt[0][2].x=cvRandInt(&rng) % width3 - width;
00099 pt[0][2].y=cvRandInt(&rng) % height3 - height;
00100 pt[1][0].x=cvRandInt(&rng) % width3 - width;
00101 pt[1][0].y=cvRandInt(&rng) % height3 - height;
00102 pt[1][1].x=cvRandInt(&rng) % width3 - width;
00103 pt[1][1].y=cvRandInt(&rng) % height3 - height;
00104 pt[1][2].x=cvRandInt(&rng) % width3 - width;
00105 pt[1][2].y=cvRandInt(&rng) % height3 - height;
00106
00107 cvPolyLine( image, pt, arr, 2, 1, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );
00108 cvShowImage(wndname,image);
00109 cvWaitKey(DELAY);
00110 }
00111
00112 for (i = 0; i< NUMBER; i++)
00113 {
00114 pt[0][0].x=cvRandInt(&rng) % width3 - width;
00115 pt[0][0].y=cvRandInt(&rng) % height3 - height;
00116 pt[0][1].x=cvRandInt(&rng) % width3 - width;
00117 pt[0][1].y=cvRandInt(&rng) % height3 - height;
00118 pt[0][2].x=cvRandInt(&rng) % width3 - width;
00119 pt[0][2].y=cvRandInt(&rng) % height3 - height;
00120 pt[1][0].x=cvRandInt(&rng) % width3 - width;
00121 pt[1][0].y=cvRandInt(&rng) % height3 - height;
00122 pt[1][1].x=cvRandInt(&rng) % width3 - width;
00123 pt[1][1].y=cvRandInt(&rng) % height3 - height;
00124 pt[1][2].x=cvRandInt(&rng) % width3 - width;
00125 pt[1][2].y=cvRandInt(&rng) % height3 - height;
00126
00127 cvFillPoly( image, pt, arr, 2, random_color(&rng), line_type, 0 );
00128 cvShowImage(wndname,image);
00129 cvWaitKey(DELAY);
00130 }
00131
00132 for (i = 0; i< NUMBER; i++)
00133 {
00134 pt1.x=cvRandInt(&rng) % width3 - width;
00135 pt1.y=cvRandInt(&rng) % height3 - height;
00136
00137 cvCircle( image, pt1, cvRandInt(&rng)%300, random_color(&rng),
00138 cvRandInt(&rng)%10-1, line_type, 0 );
00139 cvShowImage(wndname,image);
00140 cvWaitKey(DELAY);
00141 }
00142
00143 for (i = 1; i< NUMBER; i++)
00144 {
00145 pt1.x=cvRandInt(&rng) % width3 - width;
00146 pt1.y=cvRandInt(&rng) % height3 - height;
00147
00148 cvInitFont( &font, cvRandInt(&rng) % 8,
00149 (cvRandInt(&rng)%100)*0.05+0.1, (cvRandInt(&rng)%100)*0.05+0.1,
00150 (cvRandInt(&rng)%5)*0.1, cvRound(cvRandInt(&rng)%10), line_type );
00151
00152 cvPutText( image, "Testing text rendering!", pt1, &font, random_color(&rng));
00153 cvShowImage(wndname,image);
00154 cvWaitKey(DELAY);
00155 }
00156
00157 cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX, 3, 3, 0.0, 5, line_type );
00158
00159 cvGetTextSize( "OpenCV forever!", &font, &text_size, &ymin );
00160
00161 pt1.x = (width - text_size.width)/2;
00162 pt1.y = (height + text_size.height)/2;
00163 image2 = cvCloneImage(image);
00164
00165 for( i = 0; i < 255; i++ )
00166 {
00167 cvSubS( image2, cvScalarAll(i), image, 0 );
00168 cvPutText( image, "OpenCV forever!", pt1, &font, CV_RGB(255,i,i));
00169 cvShowImage(wndname,image);
00170 cvWaitKey(DELAY);
00171 }
00172
00173
00174 cvWaitKey(0);
00175 cvReleaseImage(&image);
00176 cvReleaseImage(&image2);
00177 cvDestroyWindow(wndname);
00178
00179 return 0;
00180 }
00181
00182 #ifdef _EiC
00183 main(1,"drawing.c");
00184 #endif