1. What is image contours?
It is a line connecting pixels with the same value. In other words, it can be called a line connecting pixels of the same color. So it is useful to tracking shape or recognizing objects.
contours example
2. How to draw image contours?
First, you need convert to gray image and make binary image by using Threshold, because it helps image recognition.
Next, you can find contours by using findContours method. And you can put the outputArray into drawContours method to draw contours.
- void findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
- 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())
Bye.
It is a line connecting pixels with the same value. In other words, it can be called a line connecting pixels of the same color. So it is useful to tracking shape or recognizing objects.
contours example
2. How to draw image contours?
First, you need convert to gray image and make binary image by using Threshold, because it helps image recognition.
Mat img; img = imread("./res/mh.jpg"); /* * convert to gray */
cvtColor(img, img, CV_RGB2GRAY); // convert image gray color
imshow("gray", img); /* * binary */
// if scalar value is bigger then 128, the value changed to 255. else 0
threshold(img, img, 128, 255, CV_THRESH_BINARY); imshow("binary", img);
Next, you can find contours by using findContours method. And you can put the outputArray into drawContours method to draw contours.
- void findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point());
- 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())
Mat dst = Mat::zeros(img.rows, img.cols, CV_8UC3); vector< vector<Point>> contours; vector< Vec4i> hierarchy; // RETR_CCOMP : This flag retrieves all the contours and arranges them to a 2-level hierarchy
// CHAIN_APPROX_SIMPLE : Only points that can draw contours are saved.
findContours(img.clone(), contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE); drawContours(dst, contours, -1, CV_RGB(0, 255, 0), 1, 8, hierarchy); imshow("contours", dst);
Bye.
Comments
Post a Comment