资源简介

OpenCV种子填充实现彩色图像分割的代码

资源截图

代码片段和文件信息

#ifdef _CH_
#pragma package 
#endif

#ifndef _EiC
#include “cv.h“
#include “highgui.h“
#include 
#include 
#endif

IplImage* color_img0;
IplImage* mask;
IplImage* color_img;
IplImage* gray_img0 = NULL;
IplImage* gray_img = NULL;
int ffill_case = 1;
int lo_diff = 20 up_diff = 20;
int connectivity = 4;
int is_color = 1;
int is_mask = 0;
int new_mask_val = 255;

void on_mouse( int event int x int y int flags VOID*P)
{
  if( !color_img )
    return;

  switch( event )
  {
  case CV_EVENT_LBUTTONDOWN:
    {
        CvPoint seed = cvPoint(xy);
        int lo = ffill_case == 0 ? 0 : lo_diff;
        int up = ffill_case == 0 ? 0 : up_diff;
        int flags = connectivity + (new_mask_val << 8) +
                (ffill_case == 1 ? CV_FLOODFILL_FIXED_RANGE : 0);
        int b = rand() & 255 g = rand() & 255 r = rand() & 255;
        CvConnectedComp comp;

        if( is_mask )
          cvThreshold( mask mask 1 128 CV_THRESH_BINARY );
        
        if( is_color )
        {
          CvScalar color = CV_RGB( r g b );
          cvFloodFill( color_img seed color CV_RGB( lo lo lo )
                  CV_RGB( up up up ) &comp flags is_mask ? mask : NULL );
          cvShowImage( “image“ color_img );
        }
        else
        {
          CvScalar brightness = cvRealScalar((r*2 + g*7 + b + 5)/10);
          cvFloodFill( gray_img seed brightness cvRealScalar(lo)
                  cvRealScalar(up) &comp flags is_mask ? mask : NULL );
          cvShowImage( “image“ gray_img );
        }

        printf(“%g pixels were repainted\n“ comp.area );

        if( is_mask )
          cvShowImage( “mask“ mask );
    }
    break;
  }
}

int main( int argc char** argv )
{
  char* filename = argc >= 2 ? argv[1] : (char*)“fruits.jpg“;

  if( (color_img0 = cvLoadImage(filename1)) == 0 )
    return 0;

  printf( “Hot keys: \n“
        “\tESC - quit the program\n“
        “\tc - switch color/grayscale mode\n“
        “\tm - switch mask mode\n“
        “\tr - restore the original image\n“
        “\ts - use null-range floodfill\n“
        “\tf - use gradient floodfill with fixed(absolute) range\n“
        “\tg - use gradient floodfill with floating(relative) range\n“
        “\t4 - use 4-connectivity mode\n“
        “\t8 - use 8-connectivity mode\n“ );
    
  color_img = cvCloneImage( color_img0 );
  gray_img

评论

共有 条评论