/// <summary> /// Инициализирует новый объект дистанции на основе класса /// </summary> /// <param name="marker">Маркер от которого считаем дистанцию</param> /// <param name="onx">Дистанция по оси X в пикселях</param> /// <param name="ony">Дистанция по оси Y в пикселях</param> public Distance(Marker marker, double onx, double ony) { _marker = marker; _onx = onx; _ony = ony; _getscenterofgravity = new Point(); }
private void RecognizeMarkers(List<Marker> markers) { if (markers.Count < 5) { throw new Exception("Число распознанных маркеров меньше 5. Бланк не читаем."); } else { _markers = markers; _tcmarker = markers.FirstOrDefault(marker => marker.Blob.Fullness == markers.Max(newmark => newmark.Blob.Fullness)); if (_tcmarker != null) { _markers.Remove(_tcmarker); _tcmarker.Type = MarkerType.TopCenter; } } }
private void FindMarkers() { // List<Marker> lefts = new List<Marker>(); List<Marker> rights = new List<Marker>(); foreach (Marker marker in _markers) { if (marker.Blob.CenterOfGravity.X < _tcmarker.Blob.CenterOfGravity.X) { lefts.Add(marker); } else { rights.Add(marker); } } _tlmarker = lefts.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == lefts.Min(newmark => newmark.Blob.CenterOfGravity.Y)); _blmarker = lefts.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == lefts.Max(newmark => newmark.Blob.CenterOfGravity.Y)); _trmarker = rights.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == rights.Min(newmark => newmark.Blob.CenterOfGravity.Y)); _brmarker = rights.FirstOrDefault(marker => marker.Blob.CenterOfGravity.Y == rights.Max(newmark => newmark.Blob.CenterOfGravity.Y)); }
private void FindCenterMarker() { List<Marker> _blobs = new List<Marker>(); //блокируем изображение в памяти BitmapData bitmapData = _markersimg.LockBits( new Rectangle(0, 0, _markersimg.Width, _markersimg.Height), ImageLockMode.ReadWrite, _markersimg.PixelFormat); BlobCounter blobCounter = new BlobCounter(); blobCounter.FilterBlobs = true; //устанавливаем фильтр и максимальные и минимальные размеры маркера blobCounter.MinHeight = blobCounter.MinWidth = Geometry.MMtoPX(_makerdiameter - 2.0d, _image.VerticalResolution); blobCounter.MaxHeight = blobCounter.MaxWidth = Geometry.MMtoPX(_makerdiameter + 3.0d, _image.VerticalResolution); //собственно поиск blobCounter.ProcessImage(bitmapData); Blob[] blobs = blobCounter.GetObjectsInformation(); _markersimg.UnlockBits(bitmapData); for (int i = 0, n = blobs.Length; i < n; i++) { if (blobs[i].Fullness > 0.3) { Marker tempmark = new Marker(blobs[i]); _blobs.Add(tempmark); } } this.RecognizeMarkers(_blobs); }
/// <summary> /// Добавляет новую дистанцию в коллекцию /// </summary> /// <param name="marker">Маркер</param> /// <param name="XpositionOnImage">Координата X центра ячейки на изображении</param> /// <param name="YpositionOnImage">Координата Y центра ячейки на изображении</param> public void Add(Marker marker, int XpositionOnImage, int YpositionOnImage) { _xpositiononimage = XpositionOnImage; _ypositiononimage = YPositionOnImage; this.Add(marker, XpositionOnImage - marker.Blob.CenterOfGravity.X, YpositionOnImage - marker.Blob.CenterOfGravity.Y); }
/// <summary> ///Добавляет новую дистанцию в коллекцию /// </summary> /// <param name="marker">Маркер</param> /// <param name="onx">Расстояние по оси X в пикселях</param> /// <param name="ony">Расстояние по оси Y в пикселях</param> public void Add(Marker marker, double onx, double ony) { Distance nd = new Distance(marker, onx, ony); _distanses.Add(nd); }