Introduction
In the last article we read about Starting with Emgu CV, now here we will start our first Emgu CV project. Emgu CV is not so difficult; all we have to do is to add certain references and make use of Emgu Controls. Let's get started.
Let's start creating a blank Windows Forms application.
You will get a new project created for you, before starting further enable "show all settings" under tools, this enables many features like form designer layout, snap to grid and many others.
Now let's start. The first thing we will do is to Add References. Browse for the Emgu bin folder (by default it is located at C:\Emgu\emgucv-windows-x86 2.3.0.1416\bin ), in the bin folder there must be some dlls add all those starting with "Emgu.CV" (choose only one among Emgu.CV.DebuggerVisualizers.VS2008.dll and Emgu.CV.DebuggerVisualizers.VS2010.dll depending on the Visual Studio you are using, in my case it is Emgu.CV.DebuggerVisualizers.VS2010.dll)
Now we need to add some existing items. Go to "Project" > "Add Existing Items" and now again browse for the bin directory of Emgu CV and this time choose all the dll files starting with "opencv_", these dll files are required each time the output is generated via Emgu; that is why we added them to our project directory, we will also change there the property so that they get copied always to the output folder. So, select all the DLLs added and select properties and change the "Copy to Output Directory" to "Copy Always".
We already have added the Emgu custom controls to our toolbox, now let's design our form, we will be using two ImageBox (Emgu Control), one Button and a Textbox, design the form as below.
Coding
Now go to the form1.cs code view, and add the following namespaces:
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.UI;
Next create some member variables :
Capture capturecam = null; //instance for capture using webcam
bool CapturingProcess = false; //boolean stating the capturing process status
Image<Bgr, Byte> imgOrg; //image type RGB (or Bgr as we say in Open CV)
Image<Gray, Byte> imgProc; //processed image will be grayscale so a gray image
Now it's time to add a "form load event", we will start capturing via webcam under it.
capturecam = new Capture();
This will associate the default webcam with the capturecam object.
We have added the association to the capture object in the try/catch block to avoid the error if the webcam is already in use.
We added an event handler to "Application.Idle", so that it performs the task when the application is idle, and the task is to get the next frame. "ProcessFunction" is called at every idle state of the application.
"QueryFrame" gets the next frame from the webcam, if it is null it means there is some problem and hence we stop our app there.
The "InRange" function takes two parameters, the minimum and maximum values of the Bgr range.
"SmoothGaussian" applies the Gaussian smoothing with the x,y length = 9, we can pass other parameters for x and y also.
Now let's come to the coding part of the "playorpause" button:
This is the simplest part, it checks the boolean value of CapturingProcess and changes the button text correspondingly and stops the streaming from the webcam.
Sample Output