2016-06-25 4 views

답변

-1
 LineSegment2D[] lines; 
     using (var vector = new VectorOfPointF()) 
     { 
      CvInvoke.HoughLines(cannyEdges, vector, 
       _arguments.HoughLineArgs.DistanceResolution, 
       Math.PI/_arguments.HoughLineArgs.AngleResolution, 
       _arguments.HoughLineArgs.Threshold); 

      var linesList = new List<LineSegment2D>(); 
      for (var i = 0; i < vector.Size; i++) 
      { 
       var rho = vector[i].X; 
       var theta = vector[i].Y; 
       var pt1 = new Point(); 
       var pt2 = new Point(); 
       var a = Math.Cos(theta); 
       var b = Math.Sin(theta); 
       var x0 = a * rho; 
       var y0 = b * rho; 
       pt1.X = (int)Math.Round(x0 + mat.Width * (-b)); 
       pt1.Y = (int)Math.Round(y0 + mat.Height * (a)); 
       pt2.X = (int)Math.Round(x0 - mat.Width * (-b)); 
       pt2.Y = (int)Math.Round(y0 - mat.Height * (a)); 

       linesList.Add(new LineSegment2D(pt1, pt2)); 
      } 

      lines = linesList.ToArray(); 
     } 
+0

이 예제를 이용해 주셔서 감사합니다. 올바른 유형의 주변 문제를 해결했습니다. 그러나 처리되지 않은 예외가 발생합니다 : Emgu.CV.Util.CvException : OpenCV : channels() == CV_MAT_CN (dtype) - 이유가 무엇입니까? – Avner

+0

@avvi 나는 이것이 디버그 주장이라고 믿는다. 행렬의 채널이 무엇이든간에'CV_MAT_CN (dtype) '과 같은지 확인합니다. 아마도 이것은 당신에게 도움이 될 것입니다 : http://stackoverflow.com/questions/26927126/opencv-error-assertion-failed-channels-cv-mat-cn-dtype은 행렬의 채널 수가 다른 것으로 나타납니다. –

+0

고마워요. 그래, 그걸 보았습니다. 매트에 하나의 채널이 있지만 Vector에 복사하는 것이므로 vec에서 숫자 채널을 설정하는 방법을 얻지 못합니다. – Avner

관련 문제