opencv能做的事情实在太多了, 比如, 搜索图像。
一般我们有一副小图像, 称之为模式图像, 然后我们有一副大图像, 称之为搜索图像。 我们希望搜索出大图像中小图像的位置, 怎么做呢?
具体我们有两种方法, 一种是计算相关性, 另一种是傅里叶变换, 当然你也可以用全局相减方法算, 不过误差会比较大。
傅里叶变换我写了, 但是没有正确结果, 据我所知, 分三步, 第一步, 把源图像和目标图像都扩展到同一大小, 小图像简单的在右侧和下册补零即可。。 然后两者分别作傅里叶变换, 然后两个傅里叶矩阵点乘(就是每个点乘以对应点), 得到一个新傅里叶矩阵, 再做逆傅里叶变换, 得到一个图像, 这个图像的最大值就是小图像在大图像的位置?但我这样计算, 不对, 不知道为什么。
另一种方法是计算相关性, 具体方法名叫ncc, http://www.cs.ubc.ca/research/deaton/remarks_ncc.html, 这是作者网页, 不过好在opecncv贴心的为我们提供了继承代码。
只需调用
matchTemplate(src_gray,tmpl_gray,result,CV_TM_CCOEFF_NORMED);
double minValue,maxValue;
Point minLoc,maxLoc;
Point matchLoc;
minMaxLoc(result,&minValue,&maxValue,&minLoc,&maxLoc,Mat());
即可。
opencv还提供了其他几种计算相关性的方法, 具体见http://blog.youkuaiyun.com/ubunfans/article/details/23623687。