2016-02-12 2 views
0

je suis nouveau à opencv et j'utilise opencv3. J'essaie de détecter les cercles en utilisant hough-transformer. J'ai this code qui lit l'image d'un fichier et détecte des cercles puis écris-la sur un fichier.Cela fonctionne bien.Il est l'original image et voici le detected un.la détection de cercle échoue après convertir l'image tamponnée à Mat

mais je veux détecter les cercles dans une image tamponnée .j'ai utilisé une méthode pour convertir l'image tamponnée en objet mat. Alors ce qui s'est passé est la détection de cercle échouée et l'image a été redimensionnée .la luminosité a trop réduit.Cela est failed one.

est le code ici i utilisé pour convertir l'image tamponnée à tapis (extrait de la réponse stackoverflow)

public Mat bufferedImageToMat(BufferedImage bi) { 
    byte[] pixels = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData(); 
    Mat mat = new Mat(bi.getWidth(), bi.getHeight(), CvType.CV_8UC3); 
    mat.put(0, 0, pixels); 
    return mat; 
} 

je pense problème est dans la méthode ci-dessus. c'est la ligne de code 47 et 48.

Mat source = Imgcodecs.imread(circleimage, Imgcodecs.CV_LOAD_IMAGE_COLOR); 
//Mat source = bufferedImageToMat(bi); 

si j'utilise un 1er (lire directement à partir de l'image) code fonctionne .mais si j'utilise une 2ème détection de cercle échouent.

pouvez-vous voir un problème dans cette méthode? grâce

+2

en syntaxe C++ Le constructeur Mat utilise les paramètres dans un ordre différent: 'Mat (rows, cols, type)', probablement la même chose pour la syntaxe java? S'il vous plaît essayez 'new Mat (bi.getHeight(), bi.getWidth(), CvType.CV_8UC3);' – Micka

+1

@Micka ohh ouais vous avez raison .tnx vous beaucoup.post it comme réponse plz.it fonctionne maintenant –

Répondre

1

En OpenCV, les images sont représentées par des matrices, dont les constructeurs utiliser plusieurs rows avant nombre de columns, vous devez donc utiliser

Mat mat = new Mat(bi.getHeight(), bi.getWidth(), CvType.CV_8UC3); 

J'ai essayé d'expliquer la raison de OpenCV Point(x,y) represent (column,row) or (row,column) si vous voulez en savoir plus à ce sujet.

+0

tnx vous tellement –

+1

C'est une très bonne réponse. L'enregistrer comme cible pour les doublons: D – Miki