Author: Samarth Brahmbhatt
Audience: Devs interested in computer vision
Reviewer: Mike James
OpenCV has a reputation for being difficult so any help a book can offer should be welcome.
OpenCV is a library of Computer Vision C/C++ routines.that can be used from a range of languages and operating systems.
This particular book deals with using it from C/C++, so if you want to work with another language you need a different book. It is also not a book for the C/C++ beginner as it presents the code and expects you to be able to understand it - this is not unreasonable.
Chapter 1 starts off at a comfortable pace with a look at OpenCV's history. Chapter 2 helps you install OpenCV, or rather it does if you are running Ubuntu. If you are running Windows or OSX then you are referred to the online documentation. I'm not sure why you need help installing OpenCV under Linux but not under the other two. Why not just drop the chapter?
Chapter 3 walks you through the standard demos that are included with OpenCV. This is a bit of a waste of space as all you get are short descriptions of what each demo does and a few low quality pictures of the screen. It does give you a feel for what OpenCV can do, but then so would a list of modules.
Chapter 4 starts the books core - a set of examples grouped into subjects. The first topic just deals with getting data in and out of OpenCV, something that is generally regarded as the most difficult part of using the library. This is basically a short tutorial on how to use the Mat structure. This isn't difficult, but the chapter doesn't do much to explain the logic of using Mat. Instead it provides several tables each with a set of examples of using Mat in particular ways. From the examples you can quickly work out the principles. However, I prefer to be told the principles and then be presented with some examples. The chapter covers cropping and displaying live video from a USB camera.
Part 2 of the book consists of chapters that demonstrate using OpenCV to complete various standard tasks. Chapter 5 is on image processing - blurring, resizing, erosion, dilation, and edge/corner detection. The edge detection includes more advanced methods such as the Canny Edge detector but the problem is that explanations of the reasoning behind the methods isn't made very clear. The obvious simple stuff like finding the gradient using a filter is explained, but as soon as we get to, say, the corner detector the reader is referred to the original paper. It is true that this book is about using OpenCV, but understanding a little more about the methods that OpenCV implements would help with using it. As it is what you are given are long listings implementing the technique and mostly consisting of calls to "black box" routines that do the job. Many of the routines are also illustrated by pictures that are unexplained and it is often difficult to work out what they are supposed to be demonstrating.
Chapter 6 deals with shapes - the Hough transform, RANSAC, bounding boxes and convex hulls. The explanation of the Hough transform is difficult to follow because it is essentially incomplete. The fact that there is a Matlab program given to illustrate the idea doesn't really help when the idea itself isn't clear.
By this point I was tired of being referred to Wikipedia or Wolfram Alpha to find out more about a topic. I was also finding the space given over to the very long listings with decreasing amounts of explanation annoying.
Chapter 7 deals with image segmentation and histograms. You will find the usual simple thresholding segmentation along with floodFill, Watershed and GrabCut. The histogram methods described are equalisation, backprojection, Meanshift and Camshift. The simple ideas are described adequately, the more advanced ones aren't.
Chapter 8 is about the exciting topic of machine learning and object detection. Here you will find descriptions of SIFT, SURF and ORB, but you will have to struggle to follow them. Chapter 9 is about image stitching using affine and perspective transformations and Chapter 10 is about stereo vision with single and two cameras.
The final chapter is about running OpenCV on the Raspberry Pi and it covers setting up the Pi and using the Pi's own camera.
This book is not much more than a collection of example programs of the basic OpenCV functions. As such, given it does provide some guidance to what the techniques are about, it is quite useful. However, if you go to the OpenCV website you will find lots of example program with fairly direct explanations, i.e. using maths, of the techniques being used. In most of the simple cases the online tutorials are better than the explanations given in this book. For more advanced topics the online tutorials fail because they often don't have an explanation, just a program showing you how it is all done. Even so I would suggest that you check them out before considering buying this book.