OpenCV  3.0.0-rc1
Open Source Computer Vision
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Finding contours in your image

Goal

In this tutorial you will learn how to:

Theory

Code

This tutorial code's is shown lines below. You can also download it from here

1 
7 #include "opencv2/imgcodecs.hpp"
10 #include <iostream>
11 #include <stdio.h>
12 #include <stdlib.h>
13 
14 using namespace cv;
15 using namespace std;
16 
17 Mat src; Mat src_gray;
18 int thresh = 100;
19 int max_thresh = 255;
20 RNG rng(12345);
21 
23 void thresh_callback(int, void* );
24 
28 int main( int, char** argv )
29 {
31  src = imread(argv[1]);
32  if (src.empty())
33  {
34  cerr << "No image supplied ..." << endl;
35  return -1;
36  }
37 
39  cvtColor( src, src_gray, COLOR_BGR2GRAY );
40  blur( src_gray, src_gray, Size(3,3) );
41 
43  const char* source_window = "Source";
44  namedWindow( source_window, WINDOW_AUTOSIZE );
45  imshow( source_window, src );
46 
47  createTrackbar( " Canny thresh:", "Source", &thresh, max_thresh, thresh_callback );
48  thresh_callback( 0, 0 );
49 
50  waitKey(0);
51  return(0);
52 }
53 
57 void thresh_callback(int, void* )
58 {
59  Mat canny_output;
60  vector<vector<Point> > contours;
61  vector<Vec4i> hierarchy;
62 
64  Canny( src_gray, canny_output, thresh, thresh*2, 3 );
66  findContours( canny_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );
67 
69  Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );
70  for( size_t i = 0; i< contours.size(); i++ )
71  {
72  Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
73  drawContours( drawing, contours, (int)i, color, 2, 8, hierarchy, 0, Point() );
74  }
75 
77  namedWindow( "Contours", WINDOW_AUTOSIZE );
78  imshow( "Contours", drawing );
79 }
Scalar_< double > Scalar
Definition: types.hpp:597
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT)
Blurs an image using the normalized box filter.
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)
Converts an image from one color space to another.
Mat imread(const String &filename, int flags=IMREAD_COLOR)
Loads an image from a file.
static MatExpr zeros(int rows, int cols, int type)
Returns a zero array of the specified size and type.
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar &color, int thickness=1, int lineType=LINE_8, InputArray hierarchy=noArray(), int maxLevel=INT_MAX, Point offset=Point())
Draws contours outlines or filled contours.
int createTrackbar(const String &trackbarname, const String &winname, int *value, int count, TrackbarCallback onChange=0, void *userdata=0)
Creates a trackbar and attaches it to the specified window.
Definition: imgproc.hpp:409
MatSize size
Definition: mat.hpp:1882
void namedWindow(const String &winname, int flags=WINDOW_AUTOSIZE)
Creates a window.
void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false)
Finds edges in an image using the Canny algorithm .
Size2i Size
Definition: types.hpp:308
Random Number Generator.
Definition: core.hpp:2600
#define CV_8UC3
Definition: cvdef.h:118
Definition: imgproc.hpp:421
Definition: highgui.hpp:138
void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point())
Finds contours in a binary image.
int main(int argc, const char *argv[])
Definition: facerec_demo.cpp:67
n-dimensional dense array class
Definition: mat.hpp:726
Point2i Point
Definition: types.hpp:181
convert between RGB/BGR and grayscale, color conversions
Definition: imgproc.hpp:511
int waitKey(int delay=0)
Waits for a pressed key.

Explanation

Result

Here it is:

Find_Contours_Original_Image.jpg
Find_Contours_Result.jpg