Je suis nouveau à openCV, je me suis mis dans les échantillons fournis pour Android. Mes objectifs sont de détecter les blobs de couleur, donc j'ai commencé avec un échantillon de détection de couleur-blob.Détecter encre noire sur le papier - Opencv Android
Je convertis l'image couleur en niveaux de gris et ensuite le seuillage en utilisant un seuil binaire.
L'arrière-plan est blanc, les tâches sont noires. Je veux détecter ces blobs noirs. Aussi, je voudrais dessiner leur contour en couleur mais je ne suis pas capable de le faire car l'image est en noir et blanc. J'ai réussi à obtenir ceci en niveaux de gris mais je ne préfère pas comment les contours sont dessinés, c'est comme si la tolérance de couleur était trop élevée et le contour plus grand que le blob réel (peut-être que les blobs sont trop petits?). Je suppose que cette 'tolérance' dont je parle a quelque chose à voir avec setHsvColor mais je ne comprends pas très bien cette méthode.
Merci d'avance! Cordialement
MISE À JOUR PLUS D'INFO
L'image que je veux suivre est de scissions d'encre. Imaginez un morceau de papier blanc avec des fentes d'encre noire. En ce moment je le fais en temps réel (vue caméra). L'application réelle prendrait une photo et analyser cette image. Comme je l'ai dit ci-dessus, j'ai pris l'échantillon de détection de couleur-blob (android) à partir du repo openCV GitHub. Et j'ajoute ce code dans la méthode onCameraFrame (afin de le convertir en noir et blanc en temps réel) Le convertion est fait, donc je ne me dérange pas si l'encre est noir, bleu, rouge:
mRgba = inputFrame.rgba();
/**************************************************************************/
/** BLACK AND WHITE **/
// Convert to Grey
Imgproc.cvtColor(inputFrame.gray(), mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
Mat blackAndWhiteMat = new Mat (H, W, CvType.CV_8U, new Scalar(1));
double umbral = 100.0;
Imgproc.threshold(mRgba, blackAndWhiteMat , umbral, 255, Imgproc.THRESH_BINARY);
// convert back to bitmap for displaying
Bitmap resultBitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
blackAndWhiteMat.convertTo(blackAndWhiteMat, CvType.CV_8UC1);
Utils.matToBitmap(blackAndWhiteMat, resultBitmap);
/**************************************************************************/
Ce n'est peut-être pas la meilleure solution, mais cela fonctionne.
Maintenant, je veux détecter les taches noires (fentes d'encre). Je suppose qu'ils sont détectés car le Logcat (entrée de journal de l'application exemple) jette le nombre de contours détectés, mais je ne peux pas les voir car l'image est en noir et blanc et je veux que le contour soit rouge, par exemple.
est ici une image par exemple: -
Et voici ce que je me sers RGB (couleur blob-détection comme il est, pas noir et blanc image). Remarquez comment les petits blobs ne sont pas détectés. (Est-il possible de les détecter? Ou sont-ils trop petits?)
Merci pour votre aide! Si vous avez besoin de plus d'informations, je serais heureux de mettre à jour cette question
MISE À JOUR: repo GitHub de l'échantillon couleur blob-détection (deuxième image)
GitHub Repo of openCV sample for Android
Salut, votre question est tout à fait uninformative. S'il vous plaît télécharger les images d'entrée et ce que votre traitement a conduit à. Cela aidera à comprendre la question. A titre d'exemple, voir cette question: http://stackoverflow.com/q/10168686/1874627 – saurabheights
@saurabheights merci pour votre commentaire. Je vais mettre à jour la question avec plus d'infos et aussi des extraits de code – sebasira
Ok, il y a peu de choses que je peux suggérer. Que les petits ou grands blobs ne soient pas un problème, tant qu'il y a un bon contraste. Si vous pouvez trouver la zone où la plupart des pixels sont blancs (vérifiez le composant connecté), vous aurez votre région de papier. En cela, si vous trouvez une sous-région à être noire (bien au-dessous de l'intensité moyenne de la région de papier), vous trouverez tous vos blobs. Pour dessiner le contour, vous avez besoin de la coque convexe de la région noire trouvée. En outre, pouvez-vous télécharger le code (ou un lien vers celui-ci) pour la façon dont vous avez atteint la deuxième sortie d'image. Il est tard ici, donc je vais vérifier ça demain. Merci pour la bonne mise à jour. – saurabheights