Android OpenCV Find contours
J'ai besoin d'extraire le plus grand contour d'une image.
C'est le code que j'utilise actuellement. réunis de quelques extraits en ligne
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(outerBox, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
double maxArea = -1;
int maxAreaIdx = -1;
for (int idx = 0; idx < contours.size(); idx++) {
Mat contour = contours.get(idx);
double contourarea = Imgproc.contourArea(contour);
if (contourarea > maxArea) {
maxArea = contourarea;
maxAreaIdx = idx;
}
}
et il semble fonctionner. cependant, je ne suis pas tout à fait sûr de savoir comment aller à ce sujet à partir d'ici.
J'ai essayé d'utiliser Imgproc.floodFill
, mais je ne suis pas tout à fait sûr de savoir comment.
cette fonction nécessite un mât Mat
de la même taille que l'original Mat
+2 horizontal et +2 à la verticale.
Quand j'ai couru ce sur le contour contours.get(maxAreaIdx)
, il m'a donné une erreur.
Le code:
Mat mask = Mat.zeros(contour.rows() + 2, contour.cols() + 2, CvType.CV_8UC1);
int area = Imgproc.floodFill(contour, mask, new Point(0,0), new Scalar(255, 255, 255));
L'erreur:
11-18 19:07:49.406: E/cv::error()(3117): OpenCV Error: Unsupported format or combination of formats () in void cvFloodFill(CvArr*, CvPoint, CvScalar, CvScalar, CvScalar, CvConnectedComp*, int, CvArr*), file /home/oleg/sources/opencv/modules/imgproc/src/floodfill.cpp, line 621
Donc en gros ma question est, comment puis-je, après avoir constaté que le contour avec la plus grande superficie, à "mettre en évidence"? Je veux que tout noir, et le contour blanc
Merci!
source d'informationauteur La bla bla
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le DrawContours fonction OpenCV : http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=drawcontours#drawcontours
Ou vous pouvez utiliser cette application en C++ (vous pouvez trouver l'équivalent en Java dans le OpenCV doc, il suffit de taper OpenCV + le nom de la fonction sur google)
essayer de contours[1], les contours[2]... pour trouver le plus grand
C'est pour l'affichage de votre contour: