How can one build a Qt project that implements both OpenCV and Point Cloud Library (PCL)? The writer aims to have the best of both worlds available on the same platform. This article briefs on the writer's attempt to achieve that objective with one CMakeLists file and the development within the Qt Creator. The project in this article is FingKinector 2.0, the writer's updated version of a simple application for Microsoft Kinect sensor.
Mainly the writer deals with 3-dimensional point clouds, which is why the PCL is used for most of the writer's C++ code. But when it comes to situations that require linear algebra calculations especially matrix operations (e.g. transformation), the writer finds OpenCV library to be convenient. The OpenCV library enables one to deal with n-dimensional images, which one usually treats them as matrices.
For personal/independent projects, the writer aims to develop one simple application on the platform of Qt Creator and uses both PCL and OpenCV. Previously the writer has developed the 'stupid and simple' app: FingKinector. This first version only had access to the joint motor functions of the Kinect sensor. Furthermore it was developed on Microsoft Visual Studio. For the sake of variety, the writer thought this time the upgrading of this app should be done on Qt Creator.
CMake Build Process
The following images show the step by step in the build process of the software for FingKinector 2.0, within the Qt Creator, instead of the CMake GUI.
Step 1: Open file CMakeLists.txt (Fig. 1)
Figure 1: Open File - CMakeLists.txt |
Step 2: Specify the directory for the build (Fig. 2)
Figure 2: Specify the directory for the build process |
Step 3: Run CMake (Figs. 3.1 and 3.2)
Figure 3.1: Run CMake |
Figure 3.2: Finish the build process |
Step 4: Done - start coding! (Fig. 4)
Figure 4: Start coding on Qt Creator |
Source Codes
The writer finds it prudent to divide the codes for Kinect motor functions and its image processing in different 2 separate files. The figure (Fig. 5) shows the source files for this application:
Figure 5: Source codes and other files for the project |
1) main: contains the function int main()
2) FingKinectorWindow: manages the actions/signals on the GUI
3) KinectFunkts: manages Kinect initialization and frame grabber
4) PCLOpenCV: manages the processing of 3D-point clouds and its visualization.
The writer has decided not to make these source codes available for others. However the writer welcomes suggestions and questions from all readers.
New Features
In the first version of FingKinector, one could only toy with the joint motor feature of the Kinect sensor. For this new version, FingKinector offers two options for point cloud acquisition:
i) the fundamental single mode / one shot, and
ii) convoluted triple shots - at 3 different angles: 27°, 0° and -27°.
The following figures 6.1 until 6.3 show the feature of every tab on the app FingKinector.
Fig. 6.1: FingKinector - Initialization |
Figure 6.2: FingKinector - Motor functions |
Figure 6.3: FingKinector - Visualization |
The latter mode is actually redundant, but the writer was curious about the outcome of such acquisition.
Future prospects
The writer would add two more features for this app in the future - live view of 3D-point cloud and display of range image.