and Some wonderful people of this group i have been able to hack and get to this point where i am able to get Multiple skin color contours with a rectangle bounding them regarding which i have basically 2 questions:
1. How can i get only one continues contour from all the detected ones ( largest area contour would be awesome) ?
2. How can i get the centroid of that contour ?
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
Imgproc.cvtColor(mRgba, mIntermediateMat, Imgproc.COLOR_RGB2HSV_FULL);
Core.inRange(mIntermediateMat, lo, hi, mIntermediateMat2); // green
contours = new ArrayList<Mat>();
hierarchy = new Mat();
Mat dkernal = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(10,10), new Point(1,1));
Imgproc.dilate(mIntermediateMat2, mIntermediateMat2, dkernal);
Imgproc.findContours(mIntermediateMat2, contours, hierarchy,Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
//mRgba.setTo(bl);
for( int idx = 0; idx<contours.size();idx++ ){
List<Point> goodpoints = new ArrayList<Point>(5);
Mat contour =contours.get(idx);
double contourarea =Imgproc.contourArea(contour);
Imgproc.drawContours( mRgba, contours, idx, new Scalar ( Math.random()*255, 200, 200 ), -1, 8, hierarchy );
int num = (int) contour.total();
int buff[] = new int[num*2]; // [x1, y1, x2, y2, ...]
contour.get(0, 0, buff);
Log.d("testFindContours", "Rows Contour = " + contour.cols()+"ContourBUFF = " + Arrays.toString(buff));
for(int q = 0; q<num*2;q=q+2){
goodpoints.add(new Point(buff[q], buff[q+1]));
}
Core.rectangle(mRgba, Imgproc.boundingRect(goodpoints).br(), Imgproc.boundingRect(goodpoints).tl(), new Scalar(255, 255, 0, 255));
Core.putText(mRgba, "HAND", Imgproc.boundingRect(goodpoints).tl(), Core.FONT_HERSHEY_COMPLEX, 1, new Scalar(255, 200, 0, 255));
}
--
Thank-you with Regards,
Rushikesh Khatkhede