问题
Open-CV 2.4 Android-Java:
i have searched for contours (list of MatofPoint) like this:
Imgproc.findContours(roi_mat, contours, hierarchy, cfg.retMode, cfg.apxMode);
and then the convexhull (has to be a list of MatofInt )
for (int k=0; k < contours.size(); k++){
Imgproc.convexHull(contours.get(k), hull.get(k));
}
The convexhull wants a MatofInt but the drawcontours wants a MatofPoint.. So what to do?
Thx in advance..
Edit: @OpenCV4Android
for (int k=0; k < contours.size(); k++){
Imgproc.convexHull(contours.get(k), hullInt);
for(int j=0; j < hullInt.toList().size(); j++){
hullPointList.add(contours.get(k).toList().get(hullInt.toList().get(j)));
}
hullPointMat.fromList(hullPointList);
hullPoints.add(hullPointMat);
}
Imgproc.drawContours( mROI, hullPoints, -1, new Scalar(255,0,0, 255), 1);
回答1:
Looks like OpenCV Java API lacks another convexHull() signature:
convexHull(MatOfPoint points, MatOfPoint hull);
like it's possible to call in C++.
While we haven't added it, you need to create the hull in MatOfPoint format manually:
- use
MatOfPoint::toArray()
orMatOfPoint::toList()
to get contour's points - use
MatOfInt::toArray()
orMatOfInt::toList()
to get their indexes for hull - create a new
Point[]
orList<Point>
with hull's points only - convert it to
MatOfPoint
viaMatOfPoint::fromArray()
orMatOfPoint::fromList()
- call
Core.drawContours()
回答2:
we need clear hullPointList before add list point for a contour
hullPointList .clear();
for(int j=0; j < hullInt.toList().size(); j++){
hullPointList.add(contours.get(k).toList().get(hullInt.toList().get(j)));
}
来源:https://stackoverflow.com/questions/10961660/android-java-opencv-2-4-convexhull-convexdefect