opencv 使用常见问题-阿里云开发者社区

开发者社区> 人工智能> 正文

opencv 使用常见问题

简介: [问题 1] templatematch 出现size不对的问题 OpenCV Error: Assertion failed (corrsize.height

[问题 1] templatematch 出现size不对的问题

OpenCV Error: Assertion failed (corrsize.height <= img.rows + templ.rows - 1 && corrsize.width <= img.cols + templ.cols - 1) in crossCorr, file /tmp/opencv20160107-54198-1duzac3/opencv-2.4.12/modules/imgproc/src/templmatch.cpp, line 70
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /tmp/opencv20160107-54198-1duzac3/opencv-2.4.12/modules/imgproc/src/templmatch.cpp:70: error: (-215) corrsize.height <= img.rows + templ.rows - 1 && corrsize.width <= img.cols + templ.cols - 1 in function crossCorr

[秘方]

通常是图片读取时出现了问题,比如文件目录不对,文件名写错了等等,文件读取时出现的问题。

[问题 2] Template Match 算法分析

在 opencv 中 TemplateMatch 函数由三种不同的方式构成,具体参见opencv doc

对于这三种方法来说,主要核心思想是 SSD (Sum of Squared Difference, 即差值平方和) ,从公式上来看 SSD 值约小,目标区域与模板越相似。

img_78f7b9ef6120c8b608532f85090fd546.png
Opencv templatematch 参数分析

SQDIFF 即为 SSD 思想的实现,而 CCORR 则是由 SSD 衍生出来的相关系数的方式来评估,具体参看Relationship Between the Sum of Squared Difference (SSD)
and Cross Correlation for Template Matching

即, SSD 的公式如下,其中 R(x, y) 表示 图像(x, y)处图像与模板的相似度, T(x, y) 表示模板(x, y) 处信息, I(x, y) 表示图片(x, y)处的图片信息:

img_30dbc88970ac334001b29ea12b981219.jpe
SSD 公式

将 SSD 公式进行展开之后的形式如下:

img_b54378c5183552fc6a9048fe67338459.jpe
SSD 公式展开形式

对于单张图片来说,模板和图像的信息都是固定值,因此图像信息的平方及模板信息平方均为固定值,这时唯一需要关注的是在不同位置的模板与带偏移位置的图像之间的乘积和值的大小。这时即变成为:

img_1125472dd2bbe45296e4625d987b61d9.png
CCORR 公式说明

从公式可看出 CCORR 值越大,说明 SSD 值越小,即该位置与模板匹配度越高。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章