pointset.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:2k
源码类别:

OpenCV

开发平台:

Visual C++

  1. #include "cxcore.h"
  2. #include "highgui.h"
  3. #include <stdio.h>
  4. CvSeq* point_seq = 0;
  5. IplImage* canvas = 0;
  6. CvScalar* colors = 0;
  7. int pos = 10;
  8. int is_equal( const void* _a, const void* _b, void* userdata )
  9. {
  10.     CvPoint a = *(const CvPoint*)_a;
  11.     CvPoint b = *(const CvPoint*)_b;
  12.     double threshold = *(double*)userdata;
  13.     return (double)(a.x - b.x)*(a.x - b.x) + (double)(a.y - b.y)*(a.y - b.y) <= threshold;
  14. }
  15. void on_track( int pos )
  16. {
  17.     CvSeq* labels = 0;
  18.     double threshold = pos*pos;
  19.     int i, class_count = cvSeqPartition( point_seq, 0, &labels, is_equal, &threshold );
  20.     printf("%4d classesn", class_count );
  21.     cvZero( canvas );
  22.     for( i = 0; i < labels->total; i++ )
  23.     {
  24.         CvPoint pt = *(CvPoint*)cvGetSeqElem( point_seq, i );
  25.         CvScalar color = colors[*(int*)cvGetSeqElem( labels, i )];
  26.         cvCircle( canvas, pt, 1, color, -1 );
  27.     }
  28.     cvShowImage( "points", canvas );
  29. }
  30. int main( int argc, char** argv )
  31. {
  32.     CvMemStorage* storage = cvCreateMemStorage(0);
  33.     point_seq = cvCreateSeq( CV_32SC2, sizeof(CvSeq), sizeof(CvPoint), storage );
  34.     CvRNG rng = cvRNG(0xffffffff);
  35.     int width = 500, height = 500;
  36.     int i, count = 1000;
  37.     canvas = cvCreateImage( cvSize(width,height), 8, 3 );
  38.     colors = (CvScalar*)cvAlloc( count*sizeof(colors[0]) );
  39.     for( i = 0; i < count; i++ )
  40.     {
  41.         CvPoint pt;
  42.         int icolor;
  43.         pt.x = cvRandInt( &rng ) % width;
  44.         pt.y = cvRandInt( &rng ) % height;
  45.         cvSeqPush( point_seq, &pt );
  46.         icolor = cvRandInt( &rng ) | 0x00404040;
  47.         colors[i] = CV_RGB(icolor & 255, (icolor >> 8)&255, (icolor >> 16)&255);
  48.     }
  49.     cvNamedWindow( "points", 1 );
  50.     cvCreateTrackbar( "threshold", "points", &pos, 50, on_track );
  51.     on_track(pos);
  52.     cvWaitKey(0);
  53.     return 0;
  54. }