To me, OpenCV is one of the great success stories among open source libraries. (Granted, I have strong bias because it's one I've been exposed to fairly often.)
It has managed survive and thrive through many changes of the kind that often derail community software projects: multiple changes in corporate stewardship, multiple API evolutions, change of main language from C to C++...
OpenCV is an excellent example of how a large project primarily driven by corporate developers can effectively incorporate community contributions and cutting-edge research. Many other frameworks of this scale either are entirely roadmapped through corporate development processes (e.g. WebKit, Android) or have went through some kind of existential crisis when balancing the commercial and non-commercial interests (e.g. Node.js).
Thanks to OpenCV contributors for the past 16 years, looking forward to the next!
Some really great new introductions to the library.
Specifically I'm excited about the GOTURN implementation [1]. I'll be interested to see how quickly it works on different devices and how it's implemented. I'm also curious how big that is unpacked with all dependencies optimized.
If I'm not mistaken, the algorithms (and their names) usually come directly from the literature. ie: to understand them, you could read books on AI / computer vision, or look up the research papers from which the algorithm comes from.
For a total noob, the amount of APIs in OpenCV is completely overwhelming. Studying them all is like trying to read through the entire Windows API: you'll definitely learn something, but the amount of detail will obscure the high-level specifics of how you might actually build something using these blocks.
I would suggest picking a project that seems simple enough, and trying to build that in your favorite language that has good OpenCV bindings available.
For motivation, you might want to try something that operates on live video. It's really fun to see your work come to life when you wave your hand in front of the webcam. Many of the older algorithms in OpenCV are highly optimized and will run amazingly fast on modern hardware, so that would also nudge your project towards learning the older essential methods.
(Sorry that I don't have any more specific recommendations on books!)
I've found the official documentation (docs.opencv.org) to be one of the best sources online. It goes into mathematics/theory often but presents the info in a way that you don't need it to get stuff done. I would also check out pyimagesearch.com. There's a ton of really cool projects and tutorials (mostly in python but the c++/python api are near 1:1)
I'd suggest one of the 'Learning OpenCV' editions for that. They (or atleast the first edition which is 8 or 9 years old now) cover a lot of OpenCV algorithms and more importantly, the underlying intuition/math. It's the kind of book you need to make time for and study, but will make you feel good when you do :D. There's a 3rd edition [1] now, which I haven't read but has one of the original authors as a co-author and the TOC seems as comprehensive as the 1st edition.
If you develop a taste for CV theory and math, then I suggest Richard Szeliski's [2] book. It's very readable.
Neither book covers any of the latest deep learning stuff. You have to look elsewhere for that.
14 comments
[ 6.3 ms ] story [ 50.8 ms ] threadIt has managed survive and thrive through many changes of the kind that often derail community software projects: multiple changes in corporate stewardship, multiple API evolutions, change of main language from C to C++...
OpenCV is an excellent example of how a large project primarily driven by corporate developers can effectively incorporate community contributions and cutting-edge research. Many other frameworks of this scale either are entirely roadmapped through corporate development processes (e.g. WebKit, Android) or have went through some kind of existential crisis when balancing the commercial and non-commercial interests (e.g. Node.js).
Thanks to OpenCV contributors for the past 16 years, looking forward to the next!
Specifically I'm excited about the GOTURN implementation [1]. I'll be interested to see how quickly it works on different devices and how it's implemented. I'm also curious how big that is unpacked with all dependencies optimized.
[1]http://docs.opencv.org/master/d7/d4c/classcv_1_1TrackerGOTUR...
- is for a total noob in the field of computer vision/image recognition/...
- explains all (or most of) the algorithms etc. in OpenCV (they often have weird names, telling nothing to a noob)
- explains and explores inner workings (mechanism) of each algorithm, as well as their parameters, ideally with explanatory illustrations
- has code examples and example use cases (also illustrated)?
I would suggest picking a project that seems simple enough, and trying to build that in your favorite language that has good OpenCV bindings available.
For motivation, you might want to try something that operates on live video. It's really fun to see your work come to life when you wave your hand in front of the webcam. Many of the older algorithms in OpenCV are highly optimized and will run amazingly fast on modern hardware, so that would also nudge your project towards learning the older essential methods.
(Sorry that I don't have any more specific recommendations on books!)
If you develop a taste for CV theory and math, then I suggest Richard Szeliski's [2] book. It's very readable.
Neither book covers any of the latest deep learning stuff. You have to look elsewhere for that.
[1] http://shop.oreilly.com/product/0636920044765.do
[2] http://szeliski.org/Book/
The 21 day crash course should fat you up to speed. Good luck