2016-06-09 8 views
0

emguCv를 사용하여 이미지의 구석을 감지하려고합니다. 이를 위해 emguCv에서 Harris Corner 탐지 방법을 사용했습니다. 출력 결과가 흐릿 해지고 그 방법을 사용하면 이미지의 모서리 수를 얻을 수 없습니다. 내가 검색 할 때 OpenCvSharp에서 코드를 발견하여 모서리를 탐지하면 결과물을 내 소망으로 줄 것입니다. OpenCvSharp 코드를 EmguCv로 변환하려고 시도했는데 여기에 갇혀 있습니다. EmvCv로 'Cv.GoodFeaturesToTrack()'메소드를 변환 할 때. 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 방법. 그런 다음 approxPolyDP를 사용하면 "모서리"(모양에 따라 다름)를 얻을 수 있고, cornersSubPix를 사용하면 더 많은 결과를 근사하고 유사한 루프를 그룹화하여 유사한 세그먼트를 그룹화 할 수 있습니다.