我正在尝试使用AForge.Net来检测图像中的矩形。在测试图像(附后)中,我有以下代码。
BlobCounter blobCounter = new BlobCounter();
blobCounter.FilterBlobs = true;
blobCounter.MinHeight = 5;
blobCounter.MinWidth = 5;
blobCounter.MaxHeight = 5000;
blobCounter.MaxWidth = 5000;
blobCounter.ProcessImage(currentImage);
Blob[] blobs = blobCounter.GetObjectsInformation();
// check for rectangles
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
但是,GetObjectsInformation()
只返回一个Blob
,整个画面。为什么它不能检测内部矩形?我按照例子,但不知道哪里错了。任何帮助表示赞赏。
Bitmap
。
答案 0 :(得分:2)
在搜索blob之前,你必须预处理图像,因为blob计数器在阈值图片中搜索带有黑色背景的白色物体(像素是纯白色或纯黑色),并且由于白色背景,你得到一个blob算作一个blob(整个图片)所以首先你必须做一些步骤
搜索blob
public Bitmap PreProcess(Bitmap bmp)
{
//Those are AForge filters "using Aforge.Imaging.Filters;"
Grayscale gfilter = new Grayscale(0.2125, 0.7154, 0.0721);
Invert ifilter = new Invert();
BradleyLocalThresholding thfilter = new BradleyLocalThresholding();
bmp = gfilter.Apply(bmp);
thfilter.ApplyInPlace(bmp);
ifilter.ApplyInPlace(bmp);
return bmp;
}
调用此方法为blob搜索准备图像
blobCounter.ProcessImage(PreProcess(currentImage));