Computer Vision with OpenCV 3 and Qt5: Build visually appealing, multithreaded, cross-platform computer vision applications by Amin Ahmadi Tazehkandi
My rating: 4 of 5 stars
It is time again for a small review of book I just finished reading, that as the title suggests, deals with OpenCV and Qt frameworks. One might ask at this point how such two huge topics can fit into a single book, and interestingly enough, this was the exact same question that draw me to buy this piece in the first place. If you’d like to find out what I think of it, please read on.
I bought this book because I wanted to get a concise piece on how to work with Qt and OpenCV together, and the online summary about it advertised just that. It starts out as many other books in this field, with the very basics, namely with the installation of these frameworks and setting up a development environment on various operating systems (Windwos, MacOS, Linux) and so on. Not so much later however, instead of a general discussion of the various libraries, the focus of the book shifts to the creation of an actual mixed library application based on Qt and OpenCV, and all the library explanations try to underpin this concept. In my opinion, this shift was a very welcome change from the usual “let’s explain the library systematically” approach, as the entire learning experience it provides approximates an actual development process this way.
This sort of approach might be especially valuable to those, who already possess some sort of knowledge of the various topics the book explores, like the libraries themselves, the IDE, unit testing, building process, multithreading, debugging and deployment, but despite all that struggle to connect all these pieces into a single entity: creating an application right from the beginning until it gets shipped. This choice of writing a book is not without its drawbacks though. Since there is a galore of topics that need to be covered, there is simply no room for in-depth discussion of all of the mentioned things. Instead, only those subjects are presented that are absolutely necessary for achieving the goal the author set out, namely writing a plugin based computer vision application. As a consequence of this, the reader will be left to read a lot of additional documentation, and possibly even another book specifically dealing with a particular topic.
The book is advertised as not not requiring any prior familiarity with any of the aforementioned topics, but in my experience understanding the presented multithreading, unit testing or feature desciptor and finder capabilities of these libraries would be a lot harder, if at all possible without at least some knowledge about them. Since there was no time/space for in-depth exploration of these, nor any guidelines were given for choosing one competing function/class over the other, the reader is left to look for other sources for clarification. The contents do not seem to be entirely balanced either, as a lot more emphasis was put onto Qt5 than OpenCV, which is surprising, considering that the first two words of the title. Speaking of titles, I also couldn’t help but think that “Computer Vision with OpenCV and Qt5” doesn’t fit the contents perfectly, as a title such as “Application development using Qt5 and OpenCV” would describe what it is all about far better.
Despite all these shortcomings however, I still liked the book a lot, as the author did an excellent job at achieving what he set out for, mainly integrating a ton of topics into a single entity. The book is also crammed with screenshots, which immensely helps readers to follow everything on their own computers, so feeling lost doesn’t happen much. Finally, and most importantly, the reader will be amazed how much can one learn from a single chapter of this book, as all new information is presented in such an organic way, that only at each chapter’s wrap-up will one realize fully, what a vast amount of things have actually been discussed. Yes, to those who already know something it will be an easier read, but even who never read anything about any of the topics contained in this work will still benefit from it greatly, as it is still a pretty good primer on both of these large frameworks. Absolute newcomers should expect quite an amount of extra reading from other sources though.
All in all, I am really satisfied with this book and would recommend it to those who already have some familiarity with some of the aforementioned topics, but need some information on how to unify all the knowledge. Absolute newcomers on the other hand should probably pick up some other literature first to make this book work as I believe the author intended it, although that is admittedly not a requirement, as there is no lack of the basics in here either.