Ho bisogno di estrarre il più grande contorno di un'immagine. Questo è il codice che sto usando attualmente. raccolta di pochi frammenti onlineAndroid OpenCV Trova contorni
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;
}
}
e sembra funzionare. tuttavia, non sono abbastanza sicuro di come andare da qui. Ho provato a utilizzare Imgproc.floodFill
, ma non sono abbastanza sicuro di come. questa funzione richiede un albero Mat
delle stesse dimensioni dell'originale Mat
+2 orizzontale e +2 verticale. Quando ho eseguito questo sul profilo contours.get(maxAreaIdx)
, mi ha dato un errore. Il codice:
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'errore:
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
Quindi, in pratica la mia domanda è: come posso io, dopo aver trovato il contorno con la più grande area, per "evidenziare" vero? Voglio che tutto il resto sia nero e il contorno sia bianco
Grazie!
È possibile fornire l'implementazione in Java? Non riesco a trovarlo ... – Marek
@Marek Hai ottenuto l'implementazione java di questo? –
Esiste l'esempio findContours java/opencv4android nell'esempio di rilevamento del blob colore. – Mytheral