Installing Opencvdotnet: Install

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 10

Install  

A short checklist for installing OpenCVDotNet

Installing OpenCVDotNet
If all you want is to play around with the binary version of OpenCVDotNet (write some OpenCV
apps from C#), follow these steps:

1. Download and install OpenCV. Make sure to install OpenCV to C:\Program


Files\OpenCV, or otherwise OpenCVDotNet DLLs will not be able to find it.

1. Download and install Visual C# Express.

1. Download & install the latest version of OpenCVDotNet.

After installation, binaries and source code will be installed to C:\Program


Files\OpenCVDotNet.

You can install example code if you wish to try things out...

Press CTRL+F5 to build and run the examples program.

If you receive a FileNotFoundException with HRESULT 0x8007007E) after you execute your
program, see this issue for possible solutions.
Tutorial  
This is a basic tutorial on how to use OpenCVDotNet

Hello, OpenCVDotNet
We'll create a simple C# project that uses OpenCVDotNet to perform a simple image-wise
operation on a video (AVI) file (show only the red color channel instead of all three color
channels).

You will first need to Install OpenCVDotNet (and all needed components).

Creating the Project

 Start Visual C# Express.


 Create a new Windows Application project (File -> New Project, Windows Application).
 Add references to the compiled DLL of OpenCVDotNet (if you used the installer to intsall
OpenCVDotNet, the DLL should be under C:\Program Files\OpenCVDotNet) (Project -> Add
Reference, Browse, find DLL).

CVImage.ToBitmap()

OpenCVDotNet's CVImage object has a wondrous method called ToBitmap(). This method turns
an OpenCV image into a .NET Bitmap object, which can be used whenever a Bitmap object is
accepted.

A common use of this method is to place a PictureBox on your form, and assign the resulting
Bitmap into the Image of the PictureBox. This way, a CV image can be displayed on a
Windows Form.

 Add a PictureBox component to the form using the Forms Designer (double click on the
PictureBox item in the Toolbox.
 Dock the picture box to your form (set the Dock property of the picture box to "Full").

CVCapture

CVCapture can be used to capture images from a video - it can either be constructed to capture
images from a Web Cam, or from an AVI file.

We will use a CVCapture and a .NET Timer object to play a video stream.

The Timer object will tick every 40 milliseconds (25 times per second), and in every tick, we
will capture the next frame of the video, analyze it and display it into the picture box.
 Add a Timer object to the form using the Forms Designer (double click on the Timer item from
the Toolbox).
 Configure the new timer object to tick every 40 milliseconds (set the Interval property to 40).
 Enable the timer (set the Enabled property of the timer to True).
 Add an event handler for the Timer.Tick event (double click on the Tick event of the Timer's
event list).
 Add a handler for the Load event of your main form (double click on the Load event of the form
event list).
 Press F7 to switch to code view of the form.
 At the beginning of the file, add a using statement to include the OpenCVDotNet namespace.
 Add a private member variable to contain the CVCapture object.

Your file should look like this:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OpenCVDotNet;

namespace HelloOpenCVDotNet
{
public partial class Form1 : Form
{
private CVCapture capture;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)


{

private void timer1_Tick(object sender, EventArgs e)


{

}
}
}

Opening the Video File

Type in the following code under Form1_Load handler (under <path to AVI file>, put a path to
the AVI file that you wish to display).
private void Form1_Load(object sender, EventArgs e)
{
capture = new CVCapture("<path to AVI file>");
}

QueryFrame

Use the CVCapture.QueryFrame() method to receive the next frame every tick, convert it to a
Bitmap and assign it as the Picture Box's image.

private void timer1_Tick(object sender, EventArgs e)


{
using (CVImage nextFrame = capture.QueryFrame())
{
pictureBox1.Image = nextFrame.ToBitmap();
}
}

Note that we use the using statement here, to make sure the CVImage object is disposed at the end
of the method. Without 'using', we would have to explicitly call nextFrame.Release() at the
end of the method.

Congrats! You can run your application and check it out. It should show the video you
referenced in the picture box, and it should be playing!

Split and Merge

Now, we will do some changes to the image before it's displayed. We'll flip the color channels of
the image, so that we will use the red channel instead of the green channel, the blue channel
instead of the red and the green channel instead of the blue.

To do that, we will use the Split and Merge methods of CVImage. The Split method returns an
array of 3 CVImage objects, corresponding to the blue, green and red channels (in that order). The
Merge takes an array of three CVImage objects and merges them into the three channels (BGR
order as well).

using (CVImage nextFrame = capture.QueryFrame())


{
using (CVImage emptyImage = new CVImage(nextFrame.Width,
nextFrame.Height, CVDepth.Depth8U, 1))
{
// set entire image to "0".
emptyImage.Zero();

// split the image into three channels


CVImage[] bgrChannels = nextFrame.Split();
nextFrame.Merge(new CVImage[] { emptyImage, emptyImage,
bgrChannels[2] });
pictureBox1.Image = nextFrame.ToBitmap();
// release channel images.
foreach (CVImage ch in bgrChannels)
ch.Release();
}
}

Notes:

 After the QueryFrame, we create a new CVImage object named emptyImage that is in the
same size of the original image, but with only one channel.
 Then, we call Zero() to initialize the image to 0.
 Then, we use Split to split the image to its 3 channels and Merge to merge the channels back,
taking only the 3rd component (red) and using emptyImage for the blue and green.
 Note that we must release the images received from Split().

Comment by [email protected], Mar 02, 2008

I think that you didn't consider of the end of the avi playing.It will lead to
"System.NullReferenceException?".To avoid this ,we could easily add these codes: if
(nextFrame != null) { capture = new CVCapture("<path to AVI file>");} else { capture = new
CVCapture("g:\\1.AVI");//reload} But,many avi files couldn't be opened: unsettled
“OpenCVDotNet.CVException” type of exceptional occured in OpenCVDotNet.dll Unable to
open file 'g:\1.AVI' for capture

Why?

Comment by simone.laurenzano, Apr 23, 2008

can you show the use of CVCapture function to show a webcam output??

Comment by friism, May 02, 2008

@simone.laurenzano: doing "capture = new CVCapture();" in the load method will tend to get
any attached camera. "capture = new CVCapture(0);" gets the zeroth webcam and so forth.

Comment by charkac, May 26, 2008

Can you show how to capture images using a web cam in C? If somebody can I will be so much
thankful to him/her.

Comment by [email protected], May 30, 2008

@friism: How could I get the 2nd camera ? I use "capture = new CVCapture(1);" or other
number but I can't get anything .
Comment by hryspa0031, Jun 02, 2008

to charkac, here is some code from vc++. you have to use some lib. of openCV.

……
CvCapture *  capture = 0; //for saving the captured video
IplImage * frame = 0; // for getting a frame from video
capture = cvCaptureFromCam(0);//record video from cam
frame = cvRetrieveGrame(capture);//get a frame from the captured video
……
Comment by steven.peris, Jun 27, 2008

i get the following when trying to run in VS 2005 studio with C#. it compiles fine, but i get the
following at run time

System.IO.FileNotFoundException? was unhandled

Message="The specified module could not be found. (Exception from HRESULT: 0x8007007E)"
Source="Examples" StackTrace?:

at OpenCVDotNet.Examples.Program.Main() at System.AppDomain?.nExecuteAssembly(Assembly
assembly, String args) at System.AppDomain?.ExecuteAssembly?(String assemblyFile, Evidence
assemblySecurity, String args) at
Microsoft.VisualStudio?.HostingProcess?.HostProc?.RunUsersAssembly?() at
System.Threading.ThreadHelper?.ThreadStart_Context?(Object state) at
System.Threading.ExecutionContext?.Run(ExecutionContext? executionContext, ContextCallback?
callback, Object state) at System.Threading.ThreadHelper?.ThreadStart?()

Comment by daniel.Giudici, Aug 16, 2008

This does not seem to work for me. I am getting a Bad Image Header error from cvCloneImage
function. Does anyone know what the problem could be?

Comment by jeanlucfert, Sep 02, 2008

hello

when I try the project I got this error message: FileNotFoundException? Exception from
HRESULT: 0x8007007E

I think it is a opencvdotnet registration or something. can you help. regards

Comment by [email protected], Sep 25, 2008

Hello all,
so I try to fix a problem with error signature and I make it, I download another opencvdotnet dll
libraries and program working very well.

>>>> But I want to use tracking for webcam not only for movie file. Please help me
somebody.<<<<<<

Bizzzar

If somebody want please write down your email adress and I send to you.

Comment by anoopsame, Dec 06, 2008

When i try to run the sample code that i got from the googles tutorial page ... here is the code

using System; using System.Collections.Generic; using System.ComponentModel?; using


System.Data; using System.Drawing; using System.Linq; using System.Text; using
System.Windows.Forms; using OpenCVDotNet.UI; using OpenCVDotNet.Algorithms; using
OpenCVDotNet;

namespace WindowsFormsApplication1? {

public partial class Form1 : Form {

public CVCapture capture; public Form1() {

InitializeComponent?();

private void timer1_Tick(object sender, EventArgs? e) {

try {

using (CVImage nextFrame = capture.QueryFrame?()) {

pictureBox1.Image = nextFrame.ToBitmap?();

} catch(Exception k) {

MessageBox?.Show(k.ToString?());

private void Form1_Load?(object sender, EventArgs? e) {


try {

capture = new CVCapture(@"..\\..\avi.avi");

} catch (System.Exception k) {

MessageBox?.Show(k.ToString?());

I got the error message " Could not load file or Assembly 'OPenCVDotNet,
Version=1.0.2615.24735, Culture=neutral, PublicKeyToken?=null' or one of its dependencies .
This application has failed to start because the application configuration is incorrect .
HRESULT:0x800736B1 See the end of this message for details on invoking just-in-time (JIT)
debugging instead of this dialog box.

Exception Text System.IO.FileLoadException?: Could not load file or assembly


'OpenCVDotNet, Version=1.0.2615.24735, Culture=neutral, PublicKeyToken?=null' or one of
its dependencies. This application has failed to start because the application configuration is
incorrect. Reinstalling the application may fix this problem. (Exception from HRESULT:
0x800736B1) File name: 'OpenCVDotNet, Version=1.0.2615.24735, Culture=neutral,
PublicKeyToken?=null' ---> System.Runtime.InteropServices?.COMException (0x800736B1):
This application has failed to start because the application configuration is incorrect. Reinstalling
the application may fix this problem. (Exception from HRESULT: 0x800736B1)

at WindowsFormsApplication1?.Form1.timer1_Tick(Object sender,

EventArgs? e)

at System.Windows.Forms.Timer.OnTick?(EventArgs? e) at
System.Windows.Forms.Timer.TimerNativeWindow?.WndProc?(Message& m) at
System.Windows.Forms.NativeWindow?.Callback(IntPtr? hWnd, Int32

msg, IntPtr? wparam, IntPtr? lparam)

Loaded Assemblies mscorlib

Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) CodeBase?:


file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll

WindowsFormsApplication1?
Assembly Version: 1.0.0.0 Win32 Version: 1.0.0.0 CodeBase?:

file:///C:/Documents%20and%20Settings/Anoop%20Krishnan%20G/My%20Documents/Visual
%20Studio
%202008/Projects/WindowsFormsApplication1/WindowsFormsApplication1/bin/Debug/WindowsForms
Application1.exe

System.Windows.Forms

Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) CodeBase?:


file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/Syste
m.Windows.Forms.dll

System

Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) CodeBase?:


file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll

System.Drawing

Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) CodeBase?:


file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawin
g.dll

System.Configuration

Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) CodeBase?:


file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Co
nfiguration.dll

System.Xml

Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) CodeBase?:


file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
JIT Debugging To enable just-in-time (JIT) debugging, the .config file for this application or
computer (machine.config) must have the jitDebugging value set in the system.windows.forms
section. The application must also be compiled with debugging enabled.

For example:

<configuration>

<system.windows.forms jitDebugging="true" />

</configuration>

When JIT debugging is enabled, any unhandled exception will be sent to the JIT debugger
registered on the computer rather than be handled by this dialog box.

This is the error message i got when running , the application compiles but run time errors are
occuring am using Visual Studio 2008 with OPENCV 1.0 with the OPENCVDOTNET.

Regards

Anoop Krishnan G

You might also like