我正在尝试在AForge中检测Rectangle内部的Circle。我已经成功确定Rectangles,但是无法在circles中找到Rectangle。如何在AForge中的另一个形状内找到形状。

string strPath = Server.MapPath("~/Recipt001.png");
Bitmap myBitmap = new Bitmap(strPath);

//Some filters Grayscale, invert, threshold

//Blod Filtering


BlobCounter blobCounter = new BlobCounter();
blobCounter.ProcessImage(temp);
blobCounter.ObjectsOrder = ObjectsOrder.YX;
blobCounter.FilterBlobs = true;

Blob[] blobs = blobCounter.GetObjectsInformation();
Graphics g = Graphics.FromImage(myBitmap);
Pen redPen = new Pen(Color.Red, 2);
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();

// dictionary of color to highlight different shapes
Dictionary<PolygonSubType, Color> colors = new Dictionary<PolygonSubType, Color>();

colors.Add(PolygonSubType.Unknown, Color.White);
colors.Add(PolygonSubType.Trapezoid, Color.Orange);
colors.Add(PolygonSubType.Parallelogram, Color.Red);
colors.Add(PolygonSubType.Rectangle, Color.Green);
colors.Add(PolygonSubType.Square, Color.Blue);
colors.Add(PolygonSubType.Rhombus, Color.Gray);

colors.Add(PolygonSubType.EquilateralTriangle, Color.Pink);
colors.Add(PolygonSubType.IsoscelesTriangle, Color.Purple);
colors.Add(PolygonSubType.RectangledTriangle, Color.SkyBlue);
colors.Add(PolygonSubType.RectangledIsoscelesTriangle, Color.SeaGreen);

for (int i = 0, n = blobs.Length; i < n; i++)
{
    List<IntPoint> corners;
    List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[i]);
    Point center;
    double radius;

    if (shapeChecker.IsQuadrilateral(edgePoints, out corners))
    {
        if (shapeChecker.CheckPolygonSubType(corners) == PolygonSubType.Rectangle)
        {
            g.DrawPolygon(redPen, ToPointsArray(corners));
        }
    }
}

redPen.Dispose();
g.Dispose();

最佳答案

没有一个图像处理库甚至是MATLAB中的图像处理都无法让您搜索ROI内的ROI(ROI-矩形或圆形等内在区域)。概念为裁剪区域->在该区域中搜索对象

因此,首先找到主要矩形,然后将图像裁剪为矩形并在其中进行圆搜索。否则,搜索所有圆和所有矩形,然后使用简单的数学方法将圆分类为属于哪个矩形。

关于c# - 如何在AForge中的Rectangle中查找圆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42116191/

10-11 01:01
查看更多