Ask Your Question
1

Fill Color on ConvexHull

asked 2013-03-18 23:12:50 -0600

Jenang gravatar image

updated 2013-03-18 23:27:54 -0600

Everyone, please help me. I have a problem. I make a Convex Hull detection from this image:

image description

This is a result of Convex Hull detection:

image description

Then, I want to fill a color on area within the boundary of ConvexHull, as shown in the image below:

image description

Is there someone who can help me to make image like above?

I use OpenCV 2.3.

This is a source code:

 #include "stdafx.h" 
 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/imgproc/imgproc.hpp"
 #include <iostream>
 #include <stdio.h>
 #include <stdlib.h>

 using namespace cv;
 using namespace std;

 Mat src; Mat src_gray;
 int thresh = 240;
 int max_thresh = 255;
 RNG rng(12345);

 /// Function header
 void thresh_callback(int, void* );

/** @function main */
int main( int argc, char** argv )
 {
   /// Load source image and convert it to gray
   src = imread( "kubis1.jpg", 1 );

   /// Convert image to gray and blur it
   cvtColor( src, src_gray, CV_BGR2GRAY );
   blur( src_gray, src_gray, Size(3,3) );

   /// Create Window
   char* source_window = "Source";
   namedWindow( source_window, CV_WINDOW_AUTOSIZE );
   imshow( source_window, src );

   createTrackbar( " Threshold:", "Source", &thresh, max_thresh, thresh_callback );
   thresh_callback( 0, 0 );

   waitKey(0);
   return(0);
 }

 /** @function thresh_callback */
 void thresh_callback(int, void* )
 {
   Mat src_copy = src.clone();
   Mat threshold_output;
   vector<vector<Point> > contours;
   vector<Vec4i> hierarchy;

   /// Detect edges using Threshold
   threshold( src_gray, threshold_output, thresh, 255, THRESH_BINARY );

   /// Find contours
   findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

   /// Find the convex hull object for each contour
   vector<vector<Point> >hull( contours.size() );
   for( int i = 0; i < contours.size(); i++ )
      {  convexHull( Mat(contours[i]), hull[i], false );
   }

   /// Draw contours + hull results
   Mat drawing = Mat::zeros( threshold_output.size(), CV_8UC3 );
   for( int i = 0; i< contours.size(); i++ )
      {
        Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
        drawContours( drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point() );
        drawContours( drawing, hull, i, color, 1, 8, vector<Vec4i>(), 0, Point() );
      }

   /// Show in a window
   namedWindow( "Hull demo", CV_WINDOW_AUTOSIZE );
   imshow( "Hull demo", drawing );
 }
edit retag flag offensive close merge delete

Comments

Anyone can help me?

Jenang gravatar imageJenang ( 2013-03-19 00:14:02 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2013-03-19 00:48:44 -0600

Haris gravatar image

See similar kind of question might be helpful.

edit flag offensive delete link more

Comments

can't you help me with implementation on my source code above?

Jenang gravatar imageJenang ( 2013-03-19 22:50:05 -0600 )edit

Question Tools

Stats

Asked: 2013-03-18 23:12:50 -0600

Seen: 4,067 times

Last updated: Mar 19 '13