C# 识别文档中的矩形

C# 识别文档中的矩形,c#,image-processing,aforge,C#,Image Processing,Aforge,我有一些jpg格式的文档,末尾是一个矩形,里面有一个签名。我想裁剪矩形所在的图像并保存它。 我试图使用AForge库,但在识别文档中的矩形时遇到了一些问题 ColorFiltering colorFilter = new ColorFiltering(); colorFilter.Red = new IntRange(0, 64); colorFilter.Green = new IntRange(0, 64); colorFilter.Blue = new IntRange(0, 64);

我有一些jpg格式的文档,末尾是一个矩形,里面有一个签名。我想裁剪矩形所在的图像并保存它。 我试图使用AForge库,但在识别文档中的矩形时遇到了一些问题

ColorFiltering colorFilter = new ColorFiltering();

colorFilter.Red = new IntRange(0, 64);
colorFilter.Green = new IntRange(0, 64);
colorFilter.Blue = new IntRange(0, 64);
colorFilter.FillOutsideRange = false;
colorFilter.ApplyInPlace(bitmapData);

BlobCounter blobCounter = new BlobCounter();
blobCounter.FilterBlobs = true;
blobCounter.MinHeight = 5;
blobCounter.MinWidth = 5;

blobCounter.ProcessImage(bitmapData);
Blob[] blobs = blobCounter.GetObjectsInformation();

我想我需要应用一些过滤器,但我不知道使用哪一个。

有一个完整的forge.net教程

在第一个链接中,您有:

//突出显示不同形状的颜色字典
字典颜色=
新字典();
添加(polygonsubype.Unknown,Color.White);
颜色。添加(多边形子类型。梯形,颜色。橙色);
添加(多边形子类型。平行四边形,颜色。红色);
添加(多边形子类型.矩形,颜色.绿色);
添加(polygonsubype.Square,Color.Blue);
添加(多边形子类型。菱形,颜色。灰色);
颜色。添加(多边形子类型。等边三角形,颜色。粉色);
添加(PolygonSubType.IsoscelesTriangle,Color.Purple);
添加(PolygonSubType.rectangledttriangle,Color.SkyBlue);
添加(PolygonSubType.rectangledisscelestriangle,Color.SeaGreen);
for(int i=0,n=blobs.Length;i

因此,基本上,您必须使用-method。

从GitHub获取示例。见msdn:
// 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> edgePoints = blobCounter.GetBlobsEdgePoints( blobs[i] );
    List<IntPoint> corners;

    if ( shapeChecker.IsConvexPolygon( edgePoints, out corners ) )
    {
        // check subtype
        PolygonSubType subType = shapeChecker.CheckPolygonSubType( corners );

        using ( Pen pen = new Pen( colors[subType], 2 ) )
        {
            g.DrawPolygon( pen, ToPointsArray( corners ) );
        }
    }
}