2016-06-25 2 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

Спасибо, да, я посмотрел на этот, поэтому в моем ковре есть один канал, но копирование в вектор так, что я не получаю, как я устанавливаю число каналов в vec. – Avner

Смежные вопросы