☞ I am using OpenCV 3 throughout the book and this repository. Even in OpenCV 3, the name
opencv2 still appears in header paths and in the filename
opencv2 does not refer to the version number; it refers to the newer C++ API as opposed to the older C API.
Set up an iOS development environment and OpenCV, as described in Chapter 1. If you run into difficulties in the section "Building the framework from source with extra modules", you may want to download my build of
opencv2.framework, which includes the
opencv_contribmodules. Alternatively, some readers report that they are successfully using the CocoaPods dependency manager to obtain compatible pre-packaged builds of OpenCV (with or without the
Check out the repository to any path, which we will refer to as
$ git clone https://github.com/JoeHowse/iOSWithOpenCV.git <iOSWithOpenCV_path>
If your build of
opencv2.frameworkdoes not contain the opencv_contrib modules, edit each Xcode project's Build Settings | Preprocessor Macros to remove the
Build and run the projects. Except for CoolPig, the projects use a camera, so they will work best on a real iOS device (not a simulator).
Understanding the projects
Chapter 1 introduces the CoolPig project, which is a minimal example of integration between iOS SDK and OpenCV. The app loads an image of a pig and changes its tint based on a timer.
Chapters 2 and 3 iteratively develop the LightWork project, which is a photo-capture and -sharing application. Besides basic photographic features, it offers several filters to blend pairs of images.
Chapter 4 steps up to the ManyMasks project, which is a face blending app that works on humans, cats, and possibly other mammals. The approach relies on cascade classifiers to detect facial elements, and a geometric transformation to align them. It is scale-invariant and it can compensate for small differences in rotation.
Chapter 5 puts a capstone on the book with the BeanCounter project, which deals with object classification. The approach relies on blob detection, histogram analysis, and SURF (or ORB if SURF is unavailable). It is scale-invariant and rotation-invariant. Depending on a configuration file and a set of training images, the app could classify lots of things. Currently, it is configured to classify various Canadian coins and various beans.