I did skin detection with OpenCV, it is based on HSV color space:
cvtColor(src, hsv, CV_BGR2HSV);
inRange(hsv, Scalar(0, 48, 80), Scalar(20, 255, 255), bw);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(bw, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
int s = findBiggestContour(contours);
Mat output = Mat::zeros(src.size(), CV_8UC1);
drawContours(output, contours, s, Scalar(255), -1, 8, hierarchy, 0, Point());
It finds the contour of the skin correctly, however, the edge of the output is not "smooth". Is there a way I can smooth the output contour (Please note "contours" is a vector of coordinates of the contour)?
I want to "smooth" the output based on coordinates or black/white image, not by means of algorithms like "image blur". Any suggestions? It'll be kind if you show me some OpenCV codes.