Exemplo n.º 1
0
 private void ApplyFilter(Bitmap bmp)
 {
     AForge.Imaging.Filters.ColorFiltering colorFiltering = new AForge.Imaging.Filters.ColorFiltering();
     colorFiltering.Red   = new IntRange(150, 255);
     colorFiltering.Green = new IntRange(0, 70);
     colorFiltering.Blue  = new IntRange(0, 70);
     colorFiltering.ApplyInPlace(bmp);
 }
Exemplo n.º 2
0
        private void AForgeCVInitialization()
        {
            redSliderMin.Value = MIN_RED_DEFAULT_VALUE;
            redSliderMax.Value = MAX_RED_DEFAULT_VALUE;

            greenSliderMin.Value = MIN_GREEN_DEFAULT_VALUE;
            greenSliderMax.Value = MAX_GREEN_DEFAULT_VALUE;

            blueSliderMin.Value = MIN_BLUE_DEFAULT_VALUE;
            blueSliderMax.Value = MAX_BLUE_DEFAULT_VALUE;

            mRedRange = new IntRange((int)redSliderMin.Value, (int)redSliderMax.Value);
            mGreenRange = new IntRange((int)greenSliderMin.Value, (int)greenSliderMax.Value);
            mBlueRange = new IntRange((int)blueSliderMin.Value, (int)blueSliderMax.Value);

            mRGBFilter = new AForge.Imaging.Filters.ColorFiltering();
            mRGBFilter.Red = mRedRange;
            mRGBFilter.Green = mGreenRange;
            mRGBFilter.Blue = mBlueRange;

            blobsFilter = new AForge.Imaging.Filters.BlobsFiltering();
            blobsFilter.CoupledSizeFiltering = true;
            blobsFilter.MinHeight = 40;
            blobsFilter.MinWidth = 40;
            bCounter = new BlobCounter();
        }
Exemplo n.º 3
0
        void theCamera_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
        {
            Bitmap theFrame = eventArgs.Frame;

            AForge.Imaging.Filters.ColorFiltering colorFilter = new AForge.Imaging.Filters.ColorFiltering(new AForge.IntRange(200, 255),
                                                                                                          new AForge.IntRange(200, 255),
                                                                                                          new AForge.IntRange(200, 255));
            colorFilter.ApplyInPlace(theFrame);
            AForge.Imaging.BlobCounter blobCounter = new AForge.Imaging.BlobCounter(theFrame);
            var    ledLOCs = blobCounter.GetObjectsRectangles();
            string ledpos  = "not there";

            if (ledLOCs.Length > 0)
            {
                //should probably find out which one is actually the LED... later though.
                var pos       = getLEDLocCenter(ledLOCs[0]);
                var centerPos = new AForge.Math.Vector3(theFrame.Width / 2, theFrame.Height / 2, 0);
                var ledVector = pos - centerPos;
                ledVector.Normalize();
                var ledAngle = Math.Acos(ledVector.X);
                if (ledVector.Y < 0)
                {
                    ledAngle = -ledAngle;
                }
                double deltaLEDAngle = 0;
                if (ledAngleInit)
                {
                    deltaLEDAngle = ledAngle - lastLEDAngle;
                    if (deltaLEDAngle > Math.PI * 2)
                    {
                        deltaLEDAngle -= Math.PI * 2;
                    }
                    if (deltaLEDAngle < -Math.PI * 2)
                    {
                        deltaLEDAngle += Math.PI * 2;
                    }
                    lastLEDAngle = ledAngle;
                }
                else
                {
                    ledAngleInit = true;
                    lastLEDAngle = ledAngle;
                }
                deltaLEDAngle = ledAngle * 180 / Math.PI;
                bool canTransmit = false;
                vrconnectMutex.WaitOne();
                if (VRapp != null)
                {
                    canTransmit = true;
                }
                vrconnectMutex.ReleaseMutex();
                if (canTransmit)
                {
                    byte [] deltaAngleBytes = BitConverter.GetBytes(deltaLEDAngle); //note: in degrees per frame
                    try
                    {
                        if (VRapp.Connected)
                        {
                            VRapp.GetStream().Write(deltaAngleBytes, 0, deltaAngleBytes.Length);
                        }
                    }
                    catch
                    {
                        VRapp       = null;
                        canTransmit = false;
                    }
                }
                double displayLEDAngle = deltaLEDAngle;

                ledpos = displayLEDAngle.ToString();

                var triVec = ledPoints(ledLOCs);
                if (triVec != new Vector4(0, 0, 0, 0))
                {
                    ledpos = triVec.ToString();
                    Graphics g = Graphics.FromImage(theFrame);
                    g.DrawLine(Pens.Red, triVec.X, triVec.Y, triVec.Z, triVec.W);
                    g.Flush();
                    g.Dispose();
                }

                //if we're connected to the VR app, this is where we send the delta angle.
            }
            updateTheFrame(theFrame, ledpos);
        }