I'm looking for tools that will allow simple visualization and debugging of computer vision \ image processing programs in c++.
The need is mainly for debugging and research.
Specific features:
- Showing images with zoom in \out
- ability to annotate images
- ability to link annotations to data (which will shown when clicked)
- ability to link annotations to actions
OpenCV has some capabilities, but they are pretty limited - especially mouse and keyboard interaction.
Short answer: I don't think there is.
If you're debugging and doing research, just use Matlab. If speed is an issue, use the Matlab profiler and mex the corresponding functions into C/C++ or even GPU code. I've been doing computer vision research for quite a few years and have written plenty of real-time applications this way.
OpenCV is decent and VLFeat (w/ both Matlab and C API's available) is great. However, ultimately, you're going to move faster in research with an interpreted language w/ a REPL like Matlab. The only other alternatives I'd seriously consider for computer vision prototyping are Python and Lush.
I agree with pxu that there probably isn't an image processing library that's going to do exactly what you want. Both OpenCV and VXL have a few basic and/or clunky GUI components, but won't be sufficient for your requirements.
If you want to stick with C++, then I'd recommend either Qt (distributed under LGPL - so free for commercial and non-commercial use) or Microsoft .NET. Both of these library frameworks have a good UI feature set for dealing with images (and video, to some extent), and rendering of basic shapes. Both are very well documented. My feeling is that even if you're new to Qt, it would only take a few days or so to knock up a simple application with the features you listed.
Qt might also be an interesting option if you're looking to prototype in Python. A combination of Python, PySide/PyQt, OpenCV, NumPy and SciPy should give a very decent prototyping environment. Enthought also list numerous other packages which could be useful. Furthermore, as some of these libraries are available in both languages, it'll ease the transition from prototype to optimised implementation in C++.
The technique I'm using frequently is to put in C++ code a kind of trace points.
int x, y;
double d;
MyImage myImg;
TRACE_POINT(x, y, d, myImg);
TRACE_POINT
is a macro that conditionally serializes data to an external library. For example, ImageJ is a very powerful tool with many plugins available.
I worked in a project where a simple TCP based ImageJ plugin was connected to Visual Studio debugger. Images were automatically sent to ImageJ as you mouse over the myImg
variable inside a debugger.
Or (promotion) something like Vcall of Cpp2Mtl that knows to serialize data from such a TRACE_POINT
directly to Matlab.
精彩评论