![]() |
University of Murcia ![]() |
QVision overviewThe QVision can be used in two ways. First, as a general purpose computer vision library. The QVision integrates efficient functionality for image processing, numerical computation, versatile video input/output, and almost any task relevant to computer vision application development.Second, it can be used as an application development and prototyping tool. The QVision offers a reusable block oriented application development schema. QVision applications can easily incorporate synchronized data sharing processing blocks (threads), to become multi-threaded applications. Also, the library offers several blocks for image/video input, and graphical displaying of output data and debug information. The developer can integrate these processing and input/output blocks, to easily create complex data-path processing application architectures. QVision as a computer vision libraryUsability is one of the main highlights of the QVision.As the QVision library is based on the Qt library, all its functionallity is available: file input/output and networking, graphical widgets, high level container structures (such as lists and hash tables), and so on. Also, Qt's development tools (qmake, Qt designer, etc...) allow portability amongst different Operative Systems and platforms. The QVision offers a set of well documented, tested and developer-friendly classes, to work with the most common data structures used in the field of computer vision: images (class QVImage), matrices (class QVMatrix), vectors (class QVVector), 3D points (class QV3DPointF), functions (class QVFunction), polylines (classes QVPolyline and QVPolylineF), quaternions (class QVQuaternion), tensors (class QVTensor), and so on. The QVision offers functionality to load images in QVImage objects from a wide range of image files. This functionallity is contained in the modules Image processing and MPlayer based image and video input/output. Section Image and video input/output of the manual describes most of the functionallity of the QVision related to image and video input/output. Section BasicImageProcessing of the manual details the image processing functionality provided by the QVision. The module Image processing contains the class QVImage, as well as some basic image processing functions. For a more extense and efficient image processing functionallity, the compatibility with the Intel's IPP library must be enabled. If so, the QVision will automatically include the module IPP wrapper functions. It contains a comprehensive set of wrapper functions to call IPP image processing functions with QVision object oriented types for images, matrices and so on, as parameters, instead of the raw data pointers. Section AdvancedImageProcessing of the manual can be read to learn specific issues about the usage of these functions. The module Math extensions contains the functionality and classes related to math processing: the classes QVMatrix, QVVector, QVQuaternion, QVTensor, QVFunction, and so on, as well as their operators, matrix algebra functions for matrix decomposition, and function minimization. The latter functions are mostly based on the GNU Scientific Library, Blas and Lapack libraries functionallity, so they are quite efficient. Along with the IPP and the GSL, QVision can interoperate with other libraries and toolkits commonly used in computer vision, such as the OpenCV, the CGAL library and CUDA. The toolkit includes functionality to convert from native data type objects (such as images, matrices, etc..) of those libraries to QVision data type objects. Thus a QVision application can cleanly use functionality from those libraries. Section OpenCV interoperability of the manual contains more information about using functionality from other libraries in the QVision. QVision as a framework for fast application development and prototyping toolThe QVision developer can create applications by coding and composing logically independent data processing blocks. This approach encourages modularity in the application designs and code re-usability. Computer vision or image processing algorithms can be coded inside processing blocks, and be shared or reused in new applications with almost zero programming cost.This block oriented design can be used to create parallel applications. The QVision maps the execution of each processing block to a different thread automatically, obtaining instant performance gain on multicore architectures. Thus the developer can create efficient parallel applications dividing the application data processing workload between different blocks. The toolkit includes a set of ready-to-use processing blocks to perform video input/output (for example, the QVMPlayerReaderBlock can create image an video input blocks based on the MPlayer application), for graphical output display (which will create widgets connected as input or outputs to other blocks, like image displayers, or control widgets), or basic image processing (module Blocks for the IPP functions includes a comprehensive set of processing blocks that correspond to the image processing functions from the IPP library). This is a snapshot of a typical QVision application, built using the set of graphical GUI blocks provided by the library:
![]() The graphical widgets from this example correspond to ready-to-use graphical control blocks included in the QVision. With them, the user can stop, resume and execute step by step the processing of each input image frame. The user can also use them to modify the parameters and behaviour of the algorithms implemented in the application at execution time, which is specially interesting in research applications. Besides the control (or input) graphical blocks, the toolkit also includes a set of output graphical blocks. The user can use them to inspect the performance and output of the algorithms. These blocks display images (windows named Image canvas for MSER regions and Image canvas for Harris in the former screen-shot), and other output data values, such as points, segments, polylines, resulting from the processing algorithms. Other widgets offered by the QVision plot numerical values, or show CPU time consumption statistics (window named Plot for CPU performance plot of: MSER Block in the screenshot). QVision processing blocks are specifically designed to be used at a minimal programming cost. The application corresponding to the previous snapshot can be created with just the following lines of code:
#include <QVApplication> #include <QVMPlayerReaderBlock> #include <QVDefaultGUI> #include <QVImageCanvas> #include <QVHarrisPointDetector> #include <QVMSERDetector> int main(int argc, char *argv[]) { QVApplication app(argc, argv, "Example program for QVision library. Obtains several features from input video frames." ); QVMPlayerReaderBlock videoReader("Video reader"); QVHarrisPointDetector harrisBlock("Harris Block"); QVMSERDetector mserBlock("MSER Block"); QVDefaultGUI interface; QVImageCanvas cornersCanvas("Harris corners displayer"); QVImageCanvas mserCanvas("MSER Regions displayer"); videoReader.linkProperty(&harrisBlock,"Input image"); videoReader.linkProperty(&mserBlock,"Input image"); harrisBlock.linkProperty("Input image", cornersCanvas); harrisBlock.linkProperty("Feature locations", cornersCanvas); mserBlock.linkProperty("Input image", mserCanvas); mserBlock.linkProperty("MSER contours", mserCanvas); return app.exec(); } Section Introduction to block programming provides more insight to block programming in QVision. Section Graphical user interface reviews specifically the different input/output graphical blocks provided by the QVision. To ease the development of complex applications, the QVision offers a visual development tool named The Designer. The developer can include in the application a slate window that displays every block created by the application and the data connections between them at execution time. This is the snapshot of an example designer window:
![]() Finally, the block oriented development also lets the user of a QVision application to set in the command line initial values for the parameters of the different algorithms, contained in the processing blocks. This allows the easy recreation of test conditions for the algorithms implemented by the applications. Section Command line parameters reviews this topic in detail. |