Getting OpenCV 2.2 and JavaCV working on Windows

System setup:

I currently have Windows XP on VirtualBox running on Fedora 13 ( Just to make things hard :P )

I have a Logitech C600 webcam - and with virtual box I can send the device (marked as Unknown Device 046D:0807 [0009]) to Windows.

I have tested it with the motempl.exe... The initial behavior is as expected.  A window comes up, the camera turns on, and it looks correct,  HOWEVER, when the dos terminal is closed or Ctrl-C entered to quit the program.. The next time it starts, windows ask which USB device I want to use - it has a dropdown of the camera - but when selected IT DOES NOT WORK..  

It will not work until a reboot of windows....  so, something in the releasing of resources possibly is messing things up...


Now, I will try the javacv sample MotionDetector.class

I dropped it in the myrobotlab-0003/lib directory with all the jars from javacv

cd to the directory and used the following command line


Y:\myrobotlab-0003\lib>java -classpath ".;Y:\myrobotlab-0003\lib\javacpp.jar;Y:\myrobotlab-0003\lib\javacv.jar;Y:\myrobotlab-0003\lib\javacv-windows-x86.jar" MotionDetector
Has the same behavior of only working once (before a reboot is needed) 

ReBooting :P...
Wikipedia has a good (and necessarily long) article about the complexity of the classpath here
Caveat 1: -  Currently I have a copy of the OpenCV binaries (binaries downloaded from OpenCV site) in my system32 directory (YUCK)
Moved the MotionDetector.class to y:\myrobotlab-0003
cd  y:\myrobotlab-0003
Trying the following command line...
java -Djava.library.path="./bin" -cp ".;lib/*" MotionDetector

ReBooting :P
Removed all opencv libraries from system32 directory ...

Trying the following command line...
java -Djava.library.path="./bin" -cp ".;lib/*" MotionDetector
YAY - Works - so now no more copying native libraries (at least for xp) into system32 Yay !

Trying again gives me the error 
Exception in thread "main" java.lang.Exception: cvCreateCameraCapture() Error: Could not create camera capture.
        at com.googlecode.javacv.OpenCVFrameGrabber.start(
        at MotionDetector.main(
As I stated before - even the motempl.exe does not work (does not give error info, but just exists I assume for the same reason - no valid CameraCapture)


ReBooting :P
Trying command line
Y:\myrobotlab-0003>java -Djava.library.path="./bin"  -cp "myrobotlab.jar;lib/*" org.myrobotlab.service.Invoker -service Invoker services GUIService gui > log.txt
Camera activity light comes on - but no Images !  Yarrg
Shutting down and trying motmpl.exe - give same issue of "Camera Source Dialog"
ReBooting :P

Running the JavaCV sample MotionDetector in Eclipse on Fedora works fine - however there is an error being logged to the console
HIGHGUI ERROR: V4L2: getting property #0 is not supported
I'll look into this later... now I want to see differences between and my
That was easy ... No OpenCVFrameGrabber in
I have a CvCapture object...
When a camera is activated :
capture = cvCreateCameraCapture(index);
MotionDetector has a 
 OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
checking google....
Found this excerpt:

Comment 17 by project member samuel.a...@gmail.comMay 10 (2 days ago)

		Fixed in latest release:
 * New `videoInputLib` wrapper and corresponding `VideoInputFrameGrabber` to capture using DirectShow, useful under Windows 7 where OpenCV and FFmpeg can fail to capture using Video for Windows

Use VideoInputFrameGrabber instead of OpenCVFrameGrabber.
Heck, I was using cvCreateCameraCapture ... I guess I'm soooo behind the times...
Hah couldn't find VideoInputFrameGrabber Ah haa ! - he just released it yesterday :D
Hmm... get

UnsatisfiedLinkError: no jnivideoInputLib in java.library.path  exception - is there a binary I'm missing... 
Ah hah - grepping through the binaries - it's only available for windows-x86 and windows-x86-64   
It be nice to know a design strategy for supporting multiple platforms.. I could put logic in which switches
Going for OpenCVFrameGrabber as a lowest common denominator
That works in Fedora 13 Linux - but still getting
HIGHGUI ERROR: V4L2: getting property #0 is not supported
written to the console ... trying now in windows
No GO :(
Root cause of the OpticalFlowTracker sample not working is it not opening the png files because of 
libpng warning: Application was compiled with png.h from libpng-1.4.3
libpng warning: Application  is  running with png.c from libpng-1.2.44
apparently, I have some libpng contention to deal with... 
Sample runs fine when I convert to jpgs

This one liner loads everything in Linux - which means the can be reduced considerably ! Thanks Wikipedia !


java -Djava.library.path="./bin" -classpath ".:myrobotlab.jar:./lib/*" org.myrobotlab.servicenvoker -service Invoker services GUIService gui
add -d32 to force 32 bit mode

Yay current build works on a windows machine thanks to Patrick Mccabe testing

hp mini netbook 110-3510nr