OpenCV is a powerful open-source computer vision library that is extensively used in both academia and industry. In this project, you will acquire hands-on experience in using the library to perform some computer vision tasks.
The goal of this project assignment is quite simply to learn OpenCV and use some of the computer vision algorithms implemented in the library. In the process, you will improve your skills in software programming and user interface design as well as in technical communication.
Each of you will work on building a computer vision application - a graphical user interface (GUI) program with functionality to perform computer vision tasks.
Don’t worry, most of the functionality is already available in OpenCV and requires little effort to code. The goal is to learn the tools, so spend time to understand the library and its working.
The application you will develop should include the following functionality:
read and display an image, video, webcam stream write the processed output as an image/video file the input and output display windows can be placed side-by-side (video/webcam display should be in real-time i.e. the output display should correspond to the input one at the current time).
The following functionality should be included:
Adding noise (salt and pepper) Compute the image histogram, and apply histogram equalization Morphological operations (erosion, dilation, opening, closing) Filtering (blur, Laplacian, median) Downsampling, upsampling (scale space) Detect corners (apply non-maximal suppression) Detect SIFT, FAST, ORB features Compute feature descriptors and match points Extract lines and circles (Canny operator, Hough transform)
For each of these functions, the user should be able to modify the parameters, so implement different GUI elements (menus, tabs, buttons, etc.) to allow for these options.
You may of course include additional functionality depending on your interest (will be evaluated as a bonus!). Be creative - OpenCV gives you a powerful tool at your disposal to develop your ideas!
OpenCV: you may use any version, but I would recommend version 4.5.1 (the latest one at the time of this assignment) or 2.4.9 (the one already installed on the lab computers).
Programming language: I would recommend using C++ with Qt Creator as the IDE (Integrated Development Environment) for making the GUI. Do not worry if you are not proficient in C++, you will be able to improve through this project, and the references given below are excellent to get started. You may use Python if you would like, but you will have to rely more on yourself and other available resources as I have no experience using Python with OpenCV or to build a GUI, so will not be able to help as much.
Platform: you may use the OS of your choice (OpenCV and Qt Creator are cross-platform).
Version control: I highly suggest to use GitHub (or an alternative) in your project development.
The project submission will be in two phases:
Mid-way evaluation: 27 April 2021 (13h30-17h30) Presentation with live demo: 2 June 2021 from 9h-11h30 and 13h30-16h
To submit: the application code and a user manual describing the implemented functionality should be submitted before the presentation date. The user manual should be a concise PDF document that lists the functions and parameters available along with a description of how to use them.
Grading: the project will be evaluated based on the mid-way evaluation report, user manual, presentation and demo, and application code.
Submit a short report (1-2 pages, PDF file) describing the project progress. This report should include:
Work done so far: the functionality tested/implemented, GUI design/implementation Work remaining: the functionality and GUI features remaining to be tested/implemented Project management: estimated timeline for project completion, brief description of the project management (tools used, problems faced and their solutions, etc.).
Submit the report by email before 15h on 27 April 2021 (during the project session).
Presentation with live demo
Live demo: you will maximum 15 minutes to present the functionality implemented in your application as well as to explain the software implementation, followed by Q&A. Aim for 10-12 minutes total for your presentation and demo, I will interrupt and stop the presentation after 15 minutes.
I highly encourage you to attend all the presentations. This will enable you to learn from the work of other students. However, you do not have to attend the other presentations and you will be free to arrive in time for your own presentation and leave after it. To avoid any delays, I suggest that you plan to arrive ahead of time by at least two presentations. For example, if you are the fifth presenter, ensure that you are there by the time of the third presentation (each presentation is of maximum 15 minutes, so you can estimate the time when you should be there).
You will have a couple of minutes to set up. Make sure that you have everything you need - adapters to connect to the projector, laser pointer, etc. I suggest that you test your set up in advance in the presentation room (room to be decided, probably will be Amphi 8).
The following is the order of the presentations (which we determined through the random wheel spin in the last lecture):
Fred (given the last slot due to travel constraints)
Hints and ideas
Refer to the OpenCV documentation for details of the different functions and parameters. You may convert the input images/video to grayscale before performing any operation. If you are interested, you can also try to implement functionality to handle both grayscale and color images, but it’s not necessary for the project. Test your implementation with images before trying to process a video/livestream. If the implementation works correctly for images, it should generally be a matter of a little additional code to handle input video/livestream. You can implement a processing pipeline, whereby a user may select multiple functions to be performed in a given sequence. The output window should show the result after this sequence of operations. You can further add functionality to: allow the user to view the result for each operation in the sequence (rather than just the final output from the pipeline) allow the user to change parameters for a selected operation dynamically, i.e. the processing is performed with the modified parameters and the output display is “refreshed” to show the result add or remove operations from the pipeline handle any errors (for instance through pop-up windows signalling the error cause to the user)
There are many tutorials and references available on the internet (OpenCV is very popular!). Here are some of the essential references for this project:
David Millán Escrivá, Robert Laganiere. 2019. OpenCV 4 Computer Vision Application Programming Cookbook (Fourth Edition). Packt Publishing.
(Follow the second edition if you are using OpenCV version 2)
Eng, Lee Zhi. 2019. Qt5 C++ GUI Programming Cookbook (Second Edition). Packt Publishing.