本文整理汇总了C#中AForge.Imaging.BlobCounter类的典型用法代码示例。如果您正苦于以下问题:C# BlobCounter类的具体用法?C# BlobCounter怎么用?C# BlobCounter使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
BlobCounter类属于AForge.Imaging命名空间,在下文中一共展示了BlobCounter类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: calcDescriptorInfo
public override void calcDescriptorInfo(Bitmap inImage)
{
shapeCount = new int[6];
originalImage = image;
image = imgProcessor.preProcessImage(inImage);
g = Graphics.FromImage(originalImage);
BlobCounter bCounter = new BlobCounter();
bCounter.ProcessImage(image);
Blob[] blobs = bCounter.GetObjectsInformation();
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
for (int i = 0; i < blobs.Length; i++)
{
if (blobs[i].Area < 100)
{
continue;
}
List<IntPoint> edgePts = bCounter.GetBlobsEdgePoints(blobs[i]);
checkShape(shapeChecker, edgePts);
}
g.Dispose();
}
示例2: TemplateColorTracking
/// <summary>
/// Get rectangle contain object in current frame
/// </summary>
/// <param name="templateInfo">Tracking template information</param>
/// <param name="source">Frame</param>
/// <returns>Rectangle contain object</returns>
public static Rectangle TemplateColorTracking(ImageStatistics templateInfo, ref UnmanagedImage source)
{
UnmanagedImage image = source.Clone();
// create filter
EuclideanColorFiltering filter = new EuclideanColorFiltering();
// set center colol and radius
filter.CenterColor = new RGB(
(byte)templateInfo.Red.Mean,
(byte)templateInfo.Green.Mean,
(byte)templateInfo.Blue.Mean);
filter.Radius = 30;
// apply the filter
filter.ApplyInPlace(image);
image = Grayscale.CommonAlgorithms.BT709.Apply(image);
OtsuThreshold threshold = new OtsuThreshold();
threshold.ApplyInPlace(image);
BlobCounter blobCounter = new BlobCounter();
blobCounter.ObjectsOrder = ObjectsOrder.Size;
blobCounter.ProcessImage(image);
Rectangle rect = blobCounter.ObjectsCount > 0 ? blobCounter.GetObjectsRectangles()[0] : Rectangle.Empty;
return rect;
}
示例3: getBlobMaisAlto
private Blob getBlobMaisAlto(String path)
{
try
{
Bitmap image = hslImage(path);
// process image with blob counter
BlobCounter blobCounter = new BlobCounter();
blobCounter.ProcessImage(image);
Blob[] blobs = blobCounter.GetObjectsInformation();
Blob blobMaisAlto = blobs[0];
// process each blob
foreach (Blob blob in blobs)
{
if (blob.CenterOfGravity.Y < blobMaisAlto.CenterOfGravity.Y)
blobMaisAlto = blob;
}
return blobMaisAlto;
}
catch (Exception ex)
{
throw ex;
}
}
示例4: blob_setter
public static void blob_setter(Bitmap video , Bitmap grayImage , int height , int width)
{
BlobCounter blobCounter = new BlobCounter();
// configure it to filter out small objects
blobCounter.MinWidth = width;
blobCounter.MinHeight = height;
// blobCounter.FilterBlobs = true;
// set ordering - bigger objects go first
blobCounter.ObjectsOrder = ObjectsOrder.Size;
// locate blobs
blobCounter.ProcessImage(grayImage);
Rectangle[] rects = blobCounter.GetObjectsRectangles();
foreach (Rectangle recs in rects)
if (rects.Length > 0)
{
Rectangle objectRect = rects[0];
Graphics g = Graphics.FromImage(video);
using (Pen pen = new Pen(Color.FromArgb(160, 255, 160), 3))
{
g.DrawRectangle(pen, objectRect);
}
g.Dispose();
}
}
示例5: FinalVideo_NewFrame
void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Icon newIcon = new Icon(@"c:\users\gregster\documents\visual studio 2012\Projects\WebCamTrack\WebCamTrack\bin\Debug\favicon.ico");
BlobCounter bc = new BlobCounter();
EuclideanColorFiltering filter = new EuclideanColorFiltering();
Bitmap video = (Bitmap)eventArgs.Frame.Clone();//sem filtro
Bitmap video1 = (Bitmap)eventArgs.Frame.Clone();// imagem com filtro
//
filter.CenterColor = new RGB(0, 0, 0);
filter.Radius = 100;
filter.ApplyInPlace(video1);//aplicando o filtro
bc.MinWidth = 5;
bc.MinHeight = 5;
bc.FilterBlobs = true;
// bc.ObjectsOrder = ObjectsOrder.Size;
bc.ProcessImage(video1);// processando a imagem que ja foi filtrada para identificar objetos
Rectangle[] rects = bc.GetObjectsRectangles();
foreach (Rectangle recs in rects)
if (rects.Length > 0)
{
Rectangle objectRect = rects[0];
Graphics g = Graphics.FromImage(video);//identificar objetos a partir da imagem com filtro
Graphics h = Graphics.FromImage(video1);
using (Pen pen = new Pen(Color.FromArgb(160, 255, 160), 5))
{
g.DrawIcon(newIcon, objectRect);
// g.DrawRectangle(pen, objectRect);
h.DrawRectangle(pen, objectRect);
}
g.Dispose();
h.Dispose();
}
pictureBox1.Image = video;
pictureBox2.Image = video1;
}
示例6: Execute
public override void Execute(Bitmap Image)
{
BlobCounter blobCounter = new BlobCounter();
blobCounter.MinHeight = 75;
blobCounter.MinWidth = 75;
blobCounter.CoupledSizeFiltering = true;
blobCounter.ProcessImage(Image);
Blob[] blobs = blobCounter.GetObjects(Image);
int maxSize = 0;
Blob maxObject = new Blob(0, new Rectangle(0, 0, 0, 0));
// find biggest blob
if (blobs != null)
{
foreach (Blob blob in blobs)
{
int blobSize = blob.Rectangle.Width * blob.Rectangle.Height;
if (blobSize > maxSize)
{
maxSize = blobSize;
maxObject = blob;
}
}
if (maxSize > 100)
{
if (Validity == ValidLocation.TRUE)
{
if (System.Math.Sqrt((CurrY - maxObject.Rectangle.Top) * (CurrY - maxObject.Rectangle.Top) + (CurrX - (maxObject.Rectangle.Left + maxObject.Rectangle.Right) / 2) * (CurrX - (maxObject.Rectangle.Left + maxObject.Rectangle.Right) / 2)) > 20)
{
Validity = ValidLocation.FALSE;
TargetFoundCycle = 0;
return;
}
else
{
TargetFoundCycle++;
}
}
CurrX = (maxObject.Rectangle.Left + maxObject.Rectangle.Right) / 2;
CurrY = maxObject.Rectangle.Top;
Validity = ValidLocation.TRUE;
}
else
{
Validity = ValidLocation.FALSE;
TargetFoundCycle = 0;
}
}
else
{
TargetFoundCycle = 0;
Validity = ValidLocation.FALSE;
return;
}
}
示例7: ProcessImage
/// <summary>
/// Méthode qui analyse les images envoyées par le client
/// Repère les formes présentes, les découpe et les enregistre en ficiers distincts
/// </summary>
public void ProcessImage()
{
using (CamCapturer.CamCapturer cam = new CamCapturer.CamCapturer())
{
Picture = cam.GetCapture();
Copy = cam.GetCapture();
}
ShapeChecker = new SimpleShapeChecker();
ShapeAnalyser = new BlobCounter();
string date = DateTime.Now.Date.ToString("dMyyyy");
FolderName = string.Format("Kuhlschrank-{0}", date);
ShapeAnalyser.FilterBlobs = true;
ShapeAnalyser.MinHeight = 200;
ShapeAnalyser.MinWidth = 500;
Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), FolderName));
BitmapData bitData = Picture.LockBits(new Rectangle(0, 0, Picture.Width, Picture.Height), ImageLockMode.ReadWrite, Picture.PixelFormat);
ColorFiltering filter = new ColorFiltering();
filter.Red = new IntRange(0, 64);
filter.Green = new IntRange(0, 64);
filter.Blue = new IntRange(0, 64);
filter.FillOutsideRange = false;
filter.ApplyInPlace(bitData);
ShapeAnalyser.ProcessImage(bitData);
Blob[] blobs = ShapeAnalyser.GetObjectsInformation();
Picture.UnlockBits(bitData);
for (int i = 0; i < blobs.Length; i++)
{
List<IntPoint> edgePoints = ShapeAnalyser.GetBlobsEdgePoints(blobs[i]);
List<IntPoint> corners;
ShapeChecker.IsConvexPolygon(edgePoints, out corners);
IntPoint pt0 = corners[0];
IntPoint pt1 = corners[1];
IntPoint pt2 = corners[2];
double width = Math.Sqrt(Math.Pow(pt1.X - pt0.X, 2) + Math.Pow(pt1.Y - pt0.Y, 2));
double height = Math.Sqrt(Math.Pow(pt2.X - pt1.X, 2) + Math.Pow(pt2.Y - pt1.Y, 2));
Rectangle crop = new Rectangle(corners[0].X, corners[1].Y, (int)width + 50, (int)height + 50);
Bitmap target = new Bitmap(crop.Width, crop.Height);
using (Graphics gr = Graphics.FromImage(target))
gr.DrawImage(Copy, new Rectangle(0, 0, target.Width, target.Height), crop, GraphicsUnit.Pixel);
target.Save(string.Format(@"{0}\{1}\crop{2}.jpg", Path.GetTempPath(), FolderName, i));
}
}
示例8: Initialize
public virtual void Initialize(Bitmap backgroundImage)
{
fSequence = new FiltersSequence();
BlobCounter = new BlobCounter();
BlobCounter.MinWidth = BlobCounter.MinHeight = Global.AppSettings.MinBlobSize;
BlobCounter.MaxWidth = BlobCounter.MaxWidth = Global.AppSettings.MaxBlobSize;
BlobCounter.FilterBlobs = Global.AppSettings.FilterBlobs;
BlobCounter.ObjectsOrder = ObjectsOrder.None;
Initialized = true;
}
示例9: FrameProcessor
public FrameProcessor(LaserController controller)
{
_controller = controller;
var min_size_val = 8;
bc = new BlobCounter();
bc.FilterBlobs = true;
bc.MinHeight = min_size_val;
bc.MinWidth = min_size_val;
bc.MaxHeight = min_size_val + 50;
bc.MaxWidth = min_size_val + 50;
}
示例10: CropImage
/// <summary>
/// Celem metody jest przykadrowanie otrzymanego obrazka, tak aby widok zawierał jedynie kartkę papieru, oraz zwrócenie go do metody UploadFile
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public System.Drawing.Image CropImage(System.Drawing.Image img)
{
//DocumentSkewChecker skewChecker = new DocumentSkewChecker();
//double angle = skewChecker.GetSkewAngle(image);
//RotateBilinear rotationFilter = new RotateBilinear(-angle);
//rotationFilter.FillColor = Color.White;
//Bitmap rotatedImage = rotationFilter.Apply(image);
Bitmap image = new Bitmap(img);
UnmanagedImage grayImage = null;
if (image.PixelFormat == PixelFormat.Format8bppIndexed)
{
grayImage = UnmanagedImage.FromManagedImage(image);
}
else
{
grayImage = UnmanagedImage.Create(image.Width, image.Height,
PixelFormat.Format8bppIndexed);
Grayscale.CommonAlgorithms.BT709.Apply(UnmanagedImage.FromManagedImage(image), grayImage);
}
CannyEdgeDetector edgeDetector = new CannyEdgeDetector();
UnmanagedImage edgesImage = edgeDetector.Apply(grayImage);
OtsuThreshold thresholdFilter = new OtsuThreshold();
thresholdFilter.ApplyInPlace(edgesImage);
Dilatation DilatationFilter = new Dilatation();
DilatationFilter.Apply(edgesImage);
Opening OpeningFilter = new Opening();
OpeningFilter.Apply(edgesImage);
BlobCounter blobCounter = new BlobCounter();
blobCounter.MinHeight = 32;
blobCounter.MinWidth = 32;
blobCounter.FilterBlobs = true;
blobCounter.ObjectsOrder = ObjectsOrder.Size;
blobCounter.ProcessImage(edgesImage);
Blob[] blobs = blobCounter.GetObjectsInformation();
ExtractBiggestBlob BiggestBlob = new ExtractBiggestBlob();
Bitmap biggestBlobsImage = BiggestBlob.Apply(edgesImage.ToManagedImage());
AForge.IntPoint BiggestBlogCorners = BiggestBlob.BlobPosition;
Crop cropFilter = new Crop(new Rectangle(BiggestBlogCorners.X, BiggestBlogCorners.Y, biggestBlobsImage.Width, biggestBlobsImage.Height));
Bitmap croppedImage = cropFilter.Apply(image);
return croppedImage;
}
示例11: FrameProcessor
// set color ranges to keep
public FrameProcessor(LaserController controller)
{
_controller = controller;
var min_size_val = 4;
bc = new BlobCounter();
bc.FilterBlobs = true;
bc.MinHeight = min_size_val;
bc.MinWidth = min_size_val;
bc.MaxHeight = min_size_val + 50;
bc.MaxWidth = min_size_val + 50;
AForge.Imaging.Filters.HSLFiltering hslFilter = new AForge.Imaging.Filters.HSLFiltering();
}
示例12: Execute
// 如果活动返回值,则从 CodeActivity<TResult>
// 派生并从 Execute 方法返回该值。
protected override void Execute(CodeActivityContext context)
{
// create an instance of blob counter algorithm
BlobCounterBase bc = new BlobCounter();
// set filtering options
bc.FilterBlobs = true;
bc.MinWidth = context.GetValue(最小宽度);
bc.MinHeight = context.GetValue(最小高度);
// set ordering options
bc.ObjectsOrder = ObjectsOrder.Size;
// process binary image
bc.ProcessImage(context.GetValue(处理目标));
var blobs = bc.GetObjectsInformation();
context.SetValue(输出目标, blobs);
}
示例13: Rectangle
public static void Rectangle(WriteableBitmap bitmap, DrawingContext dc)
{
// locating objects
BlobCounter blobCounter = new BlobCounter();
blobCounter.FilterBlobs = true;
blobCounter.MaxHeight = 375;
blobCounter.MaxWidth = 375;
System.Drawing.Bitmap image;
using (var stream = new MemoryStream())
{
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.Save(stream);
image = new System.Drawing.Bitmap(stream);
}
blobCounter.ProcessImage(image);
Blob[] blobs = blobCounter.GetObjectsInformation();
// check for rectangles
SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
foreach (var blob in blobs)
{
List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blob);
List<IntPoint> cornerPoints;
// use the shape checker to extract the corner points
if (shapeChecker.IsQuadrilateral(edgePoints, out cornerPoints))
{
// only do things if the corners form a rectangle
if (shapeChecker.CheckPolygonSubType(cornerPoints) == PolygonSubType.Rectangle)
{
// here i use the graphics class to draw an overlay, but you
// could also just use the cornerPoints list to calculate your
// x, y, width, height values.
List<AForge.Point> Points = new List<AForge.Point>();
foreach (var point in cornerPoints)
{
Points.Add(new AForge.Point(point.X, point.Y));
}
var path = new PathFigure(new System.Windows.Point(Points.First().X, Points.First().Y), Points.Select(row => new System.Windows.Media.LineSegment(new System.Windows.Point(row.X, row.Y), false)), true);
dc.DrawGeometry(Brushes.Red, null, new PathGeometry(new PathFigure[] { path }));
}
}
}
}
示例14: FindPlate
private WriteableBitmap FindPlate(IEnumerable<Rect> rects, WriteableBitmap image)
{
WriteableBitmap bestCandidate = null;
foreach (var rect in rects)
{
var croppedImage = image.Crop(rect);
var edgeFilter = new CannyEdgeDetector();
var smoothFilter = new Median();
var grayFilter = new Grayscale(0.2125, 0.7154, 0.0721);
var blobCounter = new BlobCounter();
var cutTop = croppedImage.PixelHeight * 0.3;
croppedImage = croppedImage.Crop(new Rect(0, cutTop, croppedImage.PixelWidth, croppedImage.PixelHeight));
var bitmap = (Bitmap)croppedImage;
var grayImage = grayFilter.Apply(bitmap);
bitmap = smoothFilter.Apply(grayImage);
edgeFilter.ApplyInPlace(bitmap);
blobCounter.ProcessImage(bitmap);
var blobs = blobCounter.GetObjectsInformation();
var possibleChars = new List<Rectangle>();
foreach (var blob in blobs)
{
var objRectangle = blob.Rectangle;
var ratio = (double)objRectangle.Height / (double)objRectangle.Width;
if (ratio >= 1.16d && ratio <= 6.3d)
{
possibleChars.Add(objRectangle);
}
}
if (possibleChars.Count == 0)
{
continue;
}
bestCandidate = croppedImage;
}
return bestCandidate;
}
示例15: ImageProcessor
public ImageProcessor()
{
shapeChecker = new SimpleShapeChecker();
hullFinder = new GrahamConvexHull();
blobCounter = new BlobCounter();
HotGoal = 0;
greenPen = new Pen(Color.FromArgb(0, 255, 0), 1);
yellowPen = new Pen(Color.FromArgb(255, 255, 0), 1);
redPen = new Pen(Color.FromArgb(255, 0, 0), 2);
orangePen = new Pen(Color.FromArgb(255, 127, 0), 1);
purplePen = new Pen(Color.FromArgb(102, 51, 153), 1);
redBrush = new SolidBrush(Color.FromArgb(255, 0, 0));
blueBrush = new SolidBrush(Color.FromArgb(0, 0, 255));
}