I want to use OpenCV’s image processing functions, but not the OpenCV GUI. I’m using OpenCV 2.0. I will use either Qt4 or WxWidgets for GUI functions. I compile with VC++ 2008 Express (VC++ 9.0).
I guess it breaks down to two or three questions:
-
Is it necessary to do something to disable OpenCV’s higui so it does not interfere with the preferred GUI library, and if so, how?
-
How to convert an OpenCV image into something (bitmap?) that the preferred GUI can display (and perhaps save)?
-
(Optional) How to convert an image that was loaded using the preferred interface into a form that OpenCV can use?
Okay. I’ve got the answer to my own question for WxWidgets. One key is not to fight openCV City Hall about RGB sequence. OpenCv really likes “BGR”. WxWidgets uses “RGB” only. The opencv data structure has a field for byte sequence, but it is seldom honored. Even the highGui function (on MS Windows) that displays an image will put up spectacularly blue tangerines if the byte sequence is set to “RGB”. I stubbornly fixed that bug in my local installation, but other operations failed also. So, I just sigh and set the byte order on the opencv side to “BGR” and do the byte swapping as necessary.
The C++ code below requires that the openCV images that it converts to wxImages are RGB, sequence “BGR”, 8 bit depth and 3 interleaved channels, and have width_step = width*3. The routines don’t check compatibility. Use at your own peril. A ready-for-primetime version would provide for regions of interest (ROI) and other fanciness.