In this article I will be providing a review of the Udemy course Hands On Computer Vision with OpenCV & Python by Shrobon Biswas featured on the Udemy online learning site. At the time of this writing I would say that the course is moderately successful with a total of 146 ratings averaging to 4.1/5 stars along with a total enrollment of 851 students.
According to the description, this course is introductory in nature and geared towards novice to intermediate programmers with a basic understanding of the Python programming language. At the time I began this course I had very little background knowledge of image processing or computer vision and no experience with OpenCV making me the ideal target audience for this course.
In the following sections I will be reviewing and discussing the various content areas providing my opinion of the material.
Review of Course Section
Introduction & Installation
This section has the typical introductory content that most courses of this nature cover, like a basic explanation of the course and outline was covered. Installation was presented in the form of a simple writeup of how to install the Anaconda environment along with OpenCV. In my opinion it would have been good to give a video demonstration of installing the required software rather than the instructions writeup provided.
In this section the author of the course describes the basics of reading and writing images to and from disk along with how to grab an image from a web resource over HTTP.
n addition to basic file IO, he nicely explains the concept of image channels for Red, Green, and Blue color images. In addition to his explanation of image channels there are a few good examples of using the Python programming language and the OpenCV library to select and manipulate channels individually as well as convert back and forth between color and grayscale images. Lastly, there is coverage of how to display images using both the OpenCV library as well as the matplotlib visualization library.
Overall my opinion of this section is quite positive. I feel that there was an adequate balance of explanation and coding examples to sufficiently describe how to read in as well as persist image data using disk.
In addition, I think the inclusion of how to read in an image over HTTP was a great practical decision, but the author did not make it clear here that the library being used was not OpenCV, but instead a submodule of the Scikit-Learn library installed along with the Anaconda installation package. The discussion of the notion of image channels was well thought out and demonstrated with a simple yet elegant example.
Here the author discusses the use of histograms to represent the distribution of intensities along single channels of a color image, as well as for a grayscale image. There are examples that show how to use the OpenCV library to manipulate the pixel data contained in a digital image into data structures appropriate for displaying as a histogram using the matplotplib library.
Although the coverage in this section is short, it is to the point and lays the foundation for later topics in the course.
Pixel Manipulation and Geometry
In this section the author starts off by demonstrating that the digital image data that OpenCV presents to the user is nothing more than a multi-dimensional numpy array of integers. This is then further elaborated via examples of manipulating individual pixel values using the familiar numpy indexing. Then the author segues into how to use the OpenCV library to draw simple lines and other geometric shapes.
After demonstrating how to draw basic geometrics shapes the author goes further into image manipulation. The topics of flipping, scaling, and rotating are covered using more coding examples.
It was during this section I noticed that I did start to get a little frustrated. There were moments when the author seemed a bit rushed and moved briskly over the specifics of various library method parameters. There also was a break in consistency in this section. For example, in the sections leading up to this one all images and scripts used in the examples were provided as downloadable resources. However, in this section a couple images were left out of the available resource and several of the example scripts were not provided, making it more difficult to follow along, but not impossible. I should note that when I did follow along coding up the examples and they did work perfectly fine using an alternate image.
Project - Snipping Utility
This section is a demonstration of to use the OpenCV library to capture mouse events on a displayed image to select and generate a cropped image of the original.
I was quite happy to see this section in the course. I personally like it when a course takes the time to demonstrate the utilities of a technology to produce something that demonstrates functionality as in the case of a primitive snipping tool in this section.
Filtering, Blurring and, Noise Removal
I found this section to be quite fascinating. Perhaps this is because the concept of applying filtering techniques to enhance digital images is one that I find remarkable. However, I do feel the instructor does a sufficiently sound job of explaining why it is useful and demonstrates how to accomplish it. Unfortunately, there is again a break in consistency in that the author does not provide the image or the example script used.
All About Thresholding
This section starts off with a simple explanation of what thresholding is. After that the instructor challenges the student with a coding exercise to create a thresholded image manually without the aid of the OpenCV library. Of course, the instructor provides a solution, but I always like it when these types of challenges are made in courses. Not only does it reinforce the "how to" part of a concept, but it also demonstrates "why" a library like OpenCV is so valuable.
Project - Making a Custom Glitter Filter
In this section the instructor demonstrates how to create a filter of an image using adaptive filtering techniques. In addition to filtering he demonstrates how to modify an image by changing individual pixel color values, again driving home the three dimensional data structure of digital images and the fact they they are simply a multi-dimensional arrays of numbers.
This section felt a bit rushed but, the content was presented with a solid example and both the code and the images being manipulated were provided so the student has the ability to further explore the topic.
Again, this section was a little rushed and I would have liked to have better explanations of what parameters were being tweaked as well as their impact on the layering of images. There was again a break in consistency whereby the example code and images were not provided which leaves the student a little out of the loop in their ability to follow along.
Working With Videos
In this section the instructor demonstrates how to use the OpenCV library to interact with a webcam. First off he shows how to capture frames and display them in a window. Then he goes on to show how to manipulate the color representation of the video feed based off of keyboard inputs.
Once again, the coding examples are not provided for this section.
As the title suggests, this section covers the notion of contours bounding objects in an image. Here the instructor does a rather good job of using some fairly simple home-made images of plain mono-chromatic shapes to simplify the concepts.
However, similar to some of other sections of this course, I feel that a significant amount of detail was glossed over in the explanation of the various parameters being used to tune the results of OpenCV methods. I find this a bit frustrating and feel that simply stating that a topic "is complicated and you should play around with values until you get a desired result" is not a sufficient explanation.
Project - Vehicle Detection
The final section of this course demonstrates how to build an application that detects vehicles from traffic image data. As I alluded to earlier, I really appreciate it when courses build a functional application that demonstrates real world value of the technology being taught. I commend the author for including this section even though it was a bit complex and difficult to comprehend but, I definitely got value out of it.
In this article I have striven to give a fair and balanced overview of the course Hands On Computer Vision with OpenCV & Python by Shrobon Biswas on Udemy. In doing so, my goal has been to describe the content covered while being careful not to divulge the specifics of the actual content, as I feel the instructor has provided value to the online learning community.
As stated in the beginning, I came into this course with very little understanding of Computer Vision concepts, armed only with a reasonable understanding of the Python programming language. That being said, I feel that I was able to learn a commendable amount about how to use the OpenCV library to interact with and manipulate both image and video content. In my opinion, I think that there could have been better coverage of the specifics of some of the library's functionality and the underlying theory, but I am not sure that was the main goal of this course.
I do have some complaints about the organizational aspect of the course structure and content as it seemed a bit thrown together in certain parts. For example, there were more than a few instances where example images and scripts were not provided and the author mentions coming back to cover different topics, later which never occur.
Overall, I would say this course is a good buy if you can catch it on sale but, the base price of $199 is probably too high for the value provided.
As always, thanks for reading and don't be shy about commenting or critiquing below.