opencv templatematch: Set caps to BGR order
authorDavid Rothlisberger <david.rothlisberger@youview.com>
Fri, 15 Jun 2012 12:19:06 +0000 (13:19 +0100)
committerThiago Santos <ts.santos@osg.sisa.samsung.com>
Mon, 28 Jul 2014 19:03:46 +0000 (16:03 -0300)
commit1f30334b5d16a62bec2af526bdb365a986bfd774
tree048b68a6fb7807ebd85757d4765f07be157b764e
parent9bdb536eec8d0685979a8d9509978cf709c4f01f
opencv templatematch: Set caps to BGR order

templatematch operates on BGR data. In fact, OpenCV's IplImage always
stores color image data in BGR order -- this isn't documented at all in
the OpenCV source code, but there are hints around the web (see for
example
http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00041000000000000000
and http://www.comp.leeds.ac.uk/vision/opencv/iplimage.html ).

gst_templatematch_load_template loads the template (the image to find)
from disk using OpenCV's cvLoadImage, so it is stored in an IplImage in
BGR order. But in gst_templatematch_chain, no OpenCV conversion
functions are used: the imageData pointer of the IplImage for the video
frame (the image to search in) is just set to point to the raw buffer
data. Without this fix, that raw data is in RGB order, so the call to
cvMatchTemplate ends up comparing the template's Blue channel against
the frame's Red channel, producing very poor results.
ext/opencv/gsttemplatematch.c