100 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "opencv2/imgproc/imgproc.hpp"
 | |
| #include "opencv2/highgui/highgui.hpp"
 | |
| #include "opencv2/imgproc/imgproc_c.h"
 | |
| #include "opencv2/legacy/legacy.hpp"
 | |
| #include <stdio.h>
 | |
| 
 | |
| static void help(void)
 | |
| {
 | |
|     printf("\nThis program demonstrated color pyramid segmentation cvcvPyrSegmentation() which is controlled\n"
 | |
|             "by two trhesholds which can be manipulated by a trackbar. It can take an image file name or defaults to 'fruits.jpg'\n"
 | |
|             "Usage :\n"
 | |
|             "./pyaramid_segmentation [image_path_filename -- Defaults to fruits.jpg]\n\n"
 | |
|             );
 | |
| }
 | |
| 
 | |
| IplImage*  image[2] = { 0, 0 }, *image0 = 0, *image1 = 0;
 | |
| CvSize size;
 | |
| 
 | |
| int  w0, h0,i;
 | |
| int  threshold1, threshold2;
 | |
| int  l,level = 4;
 | |
| int sthreshold1, sthreshold2;
 | |
| int  l_comp;
 | |
| int block_size = 1000;
 | |
| float  parameter;
 | |
| double threshold;
 | |
| double rezult, min_rezult;
 | |
| int filter = CV_GAUSSIAN_5x5;
 | |
| CvConnectedComp *cur_comp, min_comp;
 | |
| CvSeq *comp;
 | |
| CvMemStorage *storage;
 | |
| 
 | |
| CvPoint pt1, pt2;
 | |
| 
 | |
| static void ON_SEGMENT(int a)
 | |
| {
 | |
|     (void)a;
 | |
|     cvPyrSegmentation(image0, image1, storage, &comp,
 | |
|                       level, threshold1+1, threshold2+1);
 | |
| 
 | |
|     cvShowImage("Segmentation", image1);
 | |
| }
 | |
| 
 | |
| 
 | |
| int main( int argc, char** argv )
 | |
| {
 | |
|     char* filename;
 | |
| 
 | |
|     help();
 | |
| 
 | |
|     filename = argc == 2 ? argv[1] : (char*)"fruits.jpg";
 | |
| 
 | |
|     if( (image[0] = cvLoadImage( filename, 1)) == 0 )
 | |
|     {
 | |
|         help();
 | |
|         printf("Cannot load fileimage - %s\n", filename);
 | |
|         return -1;
 | |
|     }
 | |
| 
 | |
|     cvNamedWindow("Source", 0);
 | |
|     cvShowImage("Source", image[0]);
 | |
| 
 | |
|     cvNamedWindow("Segmentation", 0);
 | |
| 
 | |
|     storage = cvCreateMemStorage ( block_size );
 | |
| 
 | |
|     image[0]->width &= -(1<<level);
 | |
|     image[0]->height &= -(1<<level);
 | |
| 
 | |
|     image0 = cvCloneImage( image[0] );
 | |
|     image1 = cvCloneImage( image[0] );
 | |
|     // segmentation of the color image
 | |
|     l = 1;
 | |
|     threshold1 =255;
 | |
|     threshold2 =30;
 | |
| 
 | |
|     ON_SEGMENT(1);
 | |
| 
 | |
|     sthreshold1 = cvCreateTrackbar("Threshold1", "Segmentation", &threshold1, 255, ON_SEGMENT);
 | |
|     sthreshold2 = cvCreateTrackbar("Threshold2", "Segmentation",  &threshold2, 255, ON_SEGMENT);
 | |
| 
 | |
|     cvShowImage("Segmentation", image1);
 | |
|     cvWaitKey(0);
 | |
| 
 | |
|     cvDestroyWindow("Segmentation");
 | |
|     cvDestroyWindow("Source");
 | |
| 
 | |
|     cvReleaseMemStorage(&storage );
 | |
| 
 | |
|     cvReleaseImage(&image[0]);
 | |
|     cvReleaseImage(&image0);
 | |
|     cvReleaseImage(&image1);
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| #ifdef _EiC
 | |
| main(1,"pyramid_segmentation.c");
 | |
| #endif
 | 
