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); }
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(); }
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); }