Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library by Adrian Kaehler
My rating: 3 of 5 stars
This is yet another review, hopefully one of the last for a while, as it is high time to start a small project of some sort based on the stuff I read in these past many many months. I’m still guessing what exactly the project should be, but obviously it should involve OpenCV, Qt or maybe even some embedded somehow. While I’m still thinking about it and something starts to brew, here’s the review:
The reason I chose this book is because it seemed it has an in-depth explanation of the many features of the OpenCV library, and I was right. So in-depth in fact, that it doesn’t just explain what individual functions or classes do, but in many cases the theoretical background of the underlying mechanisms is also explained in detail. So much detail, that sometimes it feels like it is an academic research paper and not a book trying to introduce the reader to the concepts in a usable way. To be honest, these explanations get tiresome and hard to comprehend occasionally, so much, that I found myself looking up other resources to understand what is exactly going on.
Make no mistake, OpenCV is not a toy library, and perhaps it really does deserve such deep explanations, but I’m not sure if the amount of that was chosen correctly. This becomes evident when considering, that despite the fact that the text tries really hard to help comprehend certain topics and how different components work together, sometimes it is still far from being evident how and what should be used for certain tasks. The included code examples and code walkthroughs help in this regard a lot, but sometimes even after getting through those, the reader might remain puzzled. As mentioned before, reading additional online resources seems to be a necessity with this book, which is surprising considering the length of it (about a thousand pages).
As mentioned above, the book has a lot of explanations, and fortunately enough they are organized into different subjects of computer vision, like filters, image transforms, histograms, keypoints and descriptors, tracking, background subtraction, camera models and so on. Obviously, without a firm understanding of the library structure, basic data types and operations it would be impossible to write any sort of CV application, thus the book dedicates about a quarter of its entirety to these subjects as well. It is quite comprehensive in this regard, as Chapter 5 alone is nothing but detailed explanations of most available array operations, but this sort of approach can get really boring and tiresome (again), so should you pick this book up, expect a long and very bumpy ride.
Overall, this book is very comprehensive, gives a ton of details about just about any topics it touches, but I still couldn’t stop feeling that there is something lacking. Despite the fact that there is no shortage of explanations and examples, and there are even some pretty good exercises at the end of chapters, the book still feels like it is just a very detailed library documentation and doesn’t add too much of its own to the whole topic, or in other words, there was no sense of guidance at all. Don’t get me wrong, it is still worth picking this up, but perhaps this shouldn’t be the first piece one reads on the subject. In my opinion it is better suited to be used as a reference book that is read in parallel with another one when some questions arise. Because of these, I just can’t recommend it to be read without at least having something else on the subject as well, hence the 3 stars.