2016-06-09 119 views
0

我想使用emguCv檢測圖像的角點。爲此,我在emguCv中使用了Harris Corner檢測方法。但是輸出結果是模糊的,並且使用該方法我無法獲取圖像中角點的數量。當我搜索時,我在OpenCvSharp中發現了一個代碼來檢測角點,它會根據我的意願給出輸出。 我試圖將OpenCvSharp代碼轉換爲EmguCv,並將其卡在這裏。將'Cv.GoodFeaturesToTrack()'方法轉換爲EmguCv時。在EmguCv結構中,它需要11個參數和最後4個參數,我應該通過什麼?有人能幫我嗎?使用EmguCv角點檢測

OpencvSharp代碼如下:

IplImage src; 
IplImage gray; 
IplImage eigImg; 

     public void Grascale() 
     { 
      gray = Cv.CreateImage(src.Size, BitDepth.U8, 1); 
      Cv.CvtColor(src, gray, ColorConversion.RgbToGray); 
      Cv.SaveImage("grayimg.jpg", src); 
     } 

     public void DetectCorners() 
     { 
      Grascale(); 
      int cornerCount = 15000000; 


      using (src) 
      using (gray) 
      using (IplImage eigImg = new IplImage(gray.GetSize(), BitDepth.F32, 1)) 
      using (IplImage tempImg = new IplImage(gray.GetSize(), BitDepth.F32, 1)) 

      { 
       CvPoint2D32f[] corners; 
       Cv.GoodFeaturesToTrack(gray, eigImg, tempImg, out corners, ref cornerCount, 0.1, 15); 
       Cv.FindCornerSubPix(gray, corners, cornerCount, new CvSize(3, 3), new CvSize(-1, -1), new CvTermCriteria(20, 0.03)); 

       for (int i = 0; i < cornerCount; i++) 
        Cv.Circle(src, corners[i], 3, new CvColor(0, 0, 255), 2); 

       Cv.SaveImage("result_img.jpg", src); 

      } 
     } 

回答

0

您更好地使用findcountours方法。然後,大約PolyPolyDP,所以你可以得到「角落」(取決於形狀),然後cornersSubPix接近更多的結果和應用一些邏輯循環來組合類似的部分。