Tutorial: Difference between revisions

From EMGU
Jump to navigation Jump to search
No edit summary
Line 8: Line 8:


==== Emgu.CV.CvInvoke class ====
==== Emgu.CV.CvInvoke class ====
This class is written to provided a way to directly invoke opencv function within .NET languages. Each method in this class corresponds to the same function in opencv. For example, a call to <code> CvInvoke.cvCreateImage(new MCvSize(400, 300), CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1); </code> is equivalent to the function call in opencv <code> cvCreateImage(cvSize(400, 300), IPL_DEPTH_8U, 1); </code>. Both of which create a 400x300 single-channel image of 8-bit depth.
This class is written to provided a way to directly invoke opencv function within .NET languages. Each method in this class corresponds to the same function in opencv. For example, a call to  
<code>  
CvInvoke.cvCreateImage(new MCvSize(400, 300), CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1);  
</code> is equivalent to calling the function in opencv  
<code>  
cvCreateImage(cvSize(400, 300), IPL_DEPTH_8U, 1);  
</code>Both of which create a 400x300 single-channel image of 8-bit depth.


==== Emgu.CV.CvEnum namespace ====
==== Emgu.CV.CvEnum namespace ====

Revision as of 21:42, 25 February 2008

Namespace

Emgu

All libraries provided by Emgu&#0153; use the namespace Emgu.

Emgu.CV

The Emgu.CV namespace implement wrapper functions for OpenCV

Emgu.CV.CvInvoke class

This class is written to provided a way to directly invoke opencv function within .NET languages. Each method in this class corresponds to the same function in opencv. For example, a call to

CvInvoke.cvCreateImage(new MCvSize(400, 300), CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1); 

is equivalent to calling the function in opencv

cvCreateImage(cvSize(400, 300), IPL_DEPTH_8U, 1); 

Both of which create a 400x300 single-channel image of 8-bit depth.

Emgu.CV.CvEnum namespace

This namespace provides direct mapping to opencv enumerations. For example, CvEnum.IPL_DEPTH.IPL_DEPTH_8U is equivalent to the value in opencv IPL_DEPTH_8U . Both of which equals 8.

Emgu.CV.Mxxx Structure

This type of structure is a direct mapping to opencv structures. For example

  • MIplImage is equivalent to IplImage structure in opencv
  • MCvMat is equivalent to CvMat structure
  • Mxxxx is equivalent to xxxx structure

Working with images

Creating Image

Although it is possible to create image by calling CvInvoke.cvCreateImage, we suggest using the generic class Image<C, D> for image creation. There are serveral advantage of using the Managed Image<Color, Depth> class, among those are

  • Memory is gaurantee to be release when the garbage collector dispose the Image<Color, Depth> Object
  • Image<Color, Depth> class contains advanced method that is not available on OpenCV, for example, generic operation


Image Color

Image Color is specified using the first generic parameter Color Available Color Types are:

  • Gray
  • Bgr (Blue Green Red)
  • Hsv (Hue Satuation value)

Image Depth

Image Depth is specified using the second generic parameter Depth Available Color Depths are:

  • Byte
  • Single (float)

Examples

Hello, World

We will start by the Hello World sample, written in C#


String win1 = "Test Window"; //The name of the window

CvInvoke.cvNamedWindow(win1); //Create the window using the specific name


using (Image<Bgr, Byte> img = new Image<Bgr, byte>(400, 200, new Bgr(255, 0, 0))) //Create an image of 400x200 of Blue color

using (Font f = new Font(CvEnum.FONT.CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0)) //Create the font

{

img.Draw("Hello, world", f, new Point2D<int>(10, 80), new Bgr(0, 255, 0)); //Draw "Hello, world." on the image using the specific font


CvInvoke.cvShowImage(win1, img.Ptr); //Show the image

CvInvoke.cvWaitKey(0); //Wait for the key pressing event

CvInvoke.cvDestroyWindow(win1); //Destory the window

}


The above code will create an image of 400x200 with blue background color and the charaters "Hello, world" on the forground and displayed the image in a window call "Test Window".