2013-03-08 4 views
2

Je suis dans le besoin d'utiliser la transformation standard Hough (au lieu de l'aide de la méthode HoughLinesBinary qui implémente probabilistes Hough Transform) et ont tenté de le faire en créant une version personnalisée de la méthode HoughLinesBinary:standard Hough lignes dans EMGU CV

using (MemStorage stor = new MemStorage()) 
    { 
     IntPtr lines = CvInvoke.cvHoughLines2(canny.Ptr, stor.Ptr, Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_STANDARD, rhoResolution, (thetaResolution*Math.PI)/180, threshold, 0, 0); 

     Seq<MCvMat> segments = new Seq<MCvMat>(lines, stor); 
     List<MCvMat> lineslist = segments.ToList(); 
     foreach(MCvMat line in lineslist) 
     { 
      //Process lines: (rho, theta) 
     } 
    } 

Mon problème est que je ne suis pas sûr de quel type est la séquence retournée. Je crois qu'il devrait être MCvMat, dû à lire la documentation que CvMat * est utilisé dans OpenCV, qui indique également que pour STANDARD "la matrice doit être (la séquence créée sera) de type CV_32FC2"

Je ne suis pas clair que à ce que je devrais faire pour retourner et traiter ces données de sortie correctes à partir des lignes de creux STANDARD (c'est-à-dire le vecteur 2x1 pour chaque ligne donnant les informations rho et thêta).

Toute aide serait grandement appréciée. Merci

-SAL

Répondre

1

je me suis eu le même problème il y a quelques jours. C'est ainsi que je l'ai résolu en utilisant le marshalling. S'il vous plaît laissez-moi savoir si vous trouvez une solution plus simple.

using (MemStorage stor = new MemStorage()) 
{ 
    IntPtr lines = CvInvoke.cvHoughLines2(canny.Ptr, stor.Ptr, Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_STANDARD, rhoResolution, (thetaResolution*Math.PI)/180, threshold, 0, 0); 

    int maxLines = 100; 
    for(int i = 0; i < maxLines; i++) 
    { 
     IntPtr line = CvInvoke.cvGetSeqElem(lines, i); 
     if (line == IntPtr.Zero) 
     { 
      // No more lines 
      break; 
     } 
     PolarCoordinates coords = (PolarCoordinates)System.Runtime.InteropServices.Marshal.PtrToStructure(line, typeof(PolarCoordinates)); 

     // Do something with your Hough lines 
    } 
} 

avec une structure définie comme suit:

public struct PolarCoordinates 
{ 
    public float Rho; 
    public float Theta; 
} 
Questions connexes