本文整理汇总了C#中Emgu.Canny方法的典型用法代码示例。如果您正苦于以下问题:C# Emgu.Canny方法的具体用法?C# Emgu.Canny怎么用?C# Emgu.Canny使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Emgu
的用法示例。
在下文中一共展示了Emgu.Canny方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: drawBoxes
/// <summary>
/// Function takes in a grayscale image and a colour image. Rectangles are located
/// in the grayscale image (this is usually a thresholded image - so shapes are
/// strongly visible) and borders around them are drawn on the same coordinates in
/// the colour image.
/// </summary>
/// <param name="img">Grayscale image where rectangles would be located</param>
/// <param name="original">Original (colour) image where the rectangle borders will be drawn</param>
private void drawBoxes(Emgu.CV.Image<Gray, Byte> img, Emgu.CV.Image<Bgr, Byte> original)
{
Gray cannyThreshold = new Gray(180);
Gray cannyThresholdLinking = new Gray(120);
Gray circleAccumulatorThreshold = new Gray(120);
Image<Gray, Byte> cannyEdges = img.Canny(cannyThreshold, cannyThresholdLinking);
LineSegment2D[] lines = cannyEdges.HoughLinesBinary(
1, //Distance resolution in pixel-related units
Math.PI / 45.0, //Angle resolution measured in radians.
20, //threshold
30, //min Line width
10 //gap between lines
)[0]; //Get the lines from the first channel
#region Find rectangles
List<MCvBox2D> boxList = new List<MCvBox2D>();
using (MemStorage storage = new MemStorage()) //allocate storage for contour approximation
for (Contour<Point> contours = cannyEdges.FindContours(); contours != null; contours = contours.HNext)
{
Contour<Point> currentContour = contours.ApproxPoly(contours.Perimeter * 0.05, storage);
if (contours.Area > 250) //only consider contours with area greater than 250
{
if (currentContour.Total == 4) //The contour has 4 vertices.
{
#region determine if all the angles in the contour are within the range of [80, 100] degree
bool isRectangle = true;
Point[] pts = currentContour.ToArray();
LineSegment2D[] edges = PointCollection.PolyLine(pts, true);
for (int i = 0; i < edges.Length; i++)
{
double angle = Math.Abs(
edges[(i + 1) % edges.Length].GetExteriorAngleDegree(edges[i]));
if (angle < 80 || angle > 100)
{
isRectangle = false;
break;
}
}
#endregion
if (isRectangle) boxList.Add(currentContour.GetMinAreaRect());
}
}
}
#endregion
#region draw rectangles
Image<Bgr, Byte> rectangleImage = new Image<Bgr, byte>(img.Width, img.Height);
foreach (MCvBox2D box in boxList)
{
rectangleImage.Draw(box, new Bgr(Color.DarkOrange), 2);
original.Draw(box, new Bgr(Color.DarkOrange), 2);
}
capturedImageBox.Image = rectangleImage;
#endregion
}