31. October 2014       Tutorials, Node.js

JavaScript. Do you like debug JavaScript code? I hate it. Literally. What what if you have to? In this post I’m going to show you how to simplify your life by automating unit testing of the JavaScript code for the browser.

To get things more interesting - let’s automate unit-testing of the image processing library called JSFeat. JSFeat provides a JavaScript implementation of the basic image processing operations that let you to process images in your browser and build sophisticated algorithms. It’s like OpenCV for web-browser.

The source code for this tutorial is available on my Github page: https://github.com/BloodAxe/jsfeat.

 01. October 2014       News, Computer Vision Digest

Third computer vision digest. Your monthly portion of news in computer vision for September 2014.

In this issue:

Previous issues:

 11. September 2014       Cloudcv, Node.js, Tutorials

During development of CloudCV I came to the problem on converting v8::Arguments to native C++ data types in my Node.js native module. If you are new to C++ and Node.js, I suggest you to read how to write C++ modules for Node.js and connecting OpenCV and Node.js first.

Mapping V8 data types to native C++ equivalents is trivial, but somewhat wordy. One should take the argument at given index, check whether it is defined, then check it’s type and finally cast to C++ type. This works fine while you have function that receive two or three arguments of trivial type (That can be mapped directly to built-in C++ types). What about strings? Arrays? Complex types like objects or function callback? You code will grow like and became hard-to-maintain pasta-code some day.

In this post I present my approach on solving this problem with a laconic way on describing what do you expect as input arguments.

 30. August 2014       News, Computer Vision Digest

Third computer vision digest. Your monthly portion of news in computer vision for August 2014.

In this issue:

Previous issues:

 16. August 2014       OpenCV, Tutorials

Eigen is a C++ template library for matrix and vector operations. It is highly optimized for numeric operations and support vectorization and use aligned memory allocators.

When it comes to matrix operations, Eigen is much faster than OpenCV. However, it can be situations when it is necessary to pass Eigen data to OpenCV functions.

In this post I will show how to map Eigen data to OpenCV with easy and efficient way. No copy, minimal overhead and maximum syntax sugar:

Simple case

Eigen::ArrayXXd img(480, 640);
cv::imshow("test", eigen2cv(img));

Proposed approach does not limited to continuous memory layout - it support expression and blocks as well. If given expression has to be evaluated - it will be evaluated into temporary dense storage and then mapped to OpenCV structure:


// Unsharp mask
Eigen::ArrayXXd img, blur;    
cv::GaussianBlur(eigen2cv(img), eigen2cv(blur));

cv::imshow("sharpened", eigen2cv(1.5 * img - 0.5 * blur));

 07. August 2014       News, Books, Tutorials, OpenCV


Let me introduce you Adrian Rosebrock and his http://www.pyimagesearch.com/ website. It’s about computer vision and image processing using Python and OpenCV. Looks like there are more than one person that like to share programming experience via blogging :)

Here’s how Adrian position himself:

This blog is dedicated to helping other programmers understand how image search engines work. While a lot of computer vision concepts are theoretical in nature, I’m a big fan of “learning by example”. My goal is to distill my life experiences in building image search engines into concise, easy to understand examples.

I hope you will enjoy reading Adrian’s posts on superpixels, histogram matching and color clustering. In addition, he wrote a book on using OpenCV in Python.

Practical Python and OpenCV eBook

Happy reading!

 14. July 2014       OpenCV, Algorithms, Reddit

This was a request from /r/computervision. A reddit member was asking on how to count number of eggs on quite noisy image like you may see below. I’ve decided to write a simple algorithm that does the job and explain how it works.