1 | initial version |
Nice, it is working, and it is working very nice. More, your idea of resizing the mask is introducing errors, because the cv::fillPoly
is introducing errors (small "stairs") and resizing it is just making the errors to appear in the new contour, and they are even bigger.
2 | No.2 Revision |
Nice, it is working, and it is working very nice. More, your idea of resizing the mask is introducing errors, because the cv::fillPoly
is introducing errors (small "stairs") and resizing it is just making the errors to appear in the new contour, and they are even bigger.
Sample code :
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main( int argc, char** argv )
{
vector<vector<Point> > contours;
Mat img = Mat::zeros( 500, 500, CV_8UC1 );
circle( img, Point(250,250), 100, Scalar(255) );
findContours( img, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
fillConvexPoly( img, Mat( contours[0] ) / 2, Scalar(255)); // draws contour resized 1x/2
polylines( img, Mat( contours[0] ) * 2, true, Scalar(255)); // draws contour resized 2x
imshow("result",img);
waitKey();
return 0;
}
3 | No.3 Revision |
Nice, it is working, and it is working very nice. More, your idea of resizing the mask is introducing errors, because the cv::fillPoly
is introducing errors (small "stairs") and resizing it is just making the errors to appear in the new contour, and they are even bigger.
Sample code :
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main( int argc, char** argv )
{
vector<vector<Point> > contours;
Mat img = Mat::zeros( 500, 500, CV_8UC1 );
circle( img, Point(250,250), 100, Scalar(255) );
findContours( img, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
fillConvexPoly( img, Mat( contours[0] ) / 2, Scalar(255)); // draws contour resized 1x/2
polylines( img, Mat( contours[0] ) * 2, true, Scalar(255)); // draws contour resized 2x
imshow("result",img);
waitKey();
return 0;
}
result image: