【发布时间】:2012-09-01 16:23:19
【问题描述】:
我最近一直在尝试寻找一种快速有效的方法来使用 Python 语言在两个数组之间执行互相关检查。经过一番阅读,我发现了这两个选项:
-
NumPy.correlate()方法,在处理大型数组时太慢了。 -
cv.MatchTemplate()方法,似乎要快得多。
出于显而易见的原因,我选择了第二个选项。我尝试执行以下代码:
import scipy
import cv
image = cv.fromarray(scipy.float32(scipy.asarray([1,2,2,1])),allowND=True)
template = cv.fromarray(scipy.float32(scipy.asarray([2,2])),allowND=True)
result = cv.fromarray(scipy.float32(scipy.asarray([0,0,0])),allowND=True)
cv.MatchTemplate(image,template,result,cv.CV_TM_CCORR)
尽管这段代码假设非常简单,但它会引发下一个错误:
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /builddir/build/BUILD/OpenCV-2.1.0/src/cxcore/cxarray.cpp, line 2476
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cv.error: Unrecognized or unsupported array type
经过几个小时令人沮丧的尝试,我仍然卡住了!有人有什么建议吗?
顺便说一句,这是我的 Python 版本输出:
Python 2.7 (r27:82500, Sep 16 2010, 18:03:06)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
谢谢大家!
【问题讨论】:
-
我已经阅读了这篇文章,谢谢。正如我所说,我不想使用 NumPy\SciPy 库,因为它们提供了相当慢的方法。
-
虽然 numpy/scipy 并不总是使用最快的实现,但它们本身并不慢。例如,他们的 FFT 不如某些人快(这就是我写 FFTW wrappers 的原因)。关键是,不要指望使用 OpenCV 与使用带有 numpy/scipy 的“正确”算法相比会出现神奇的速度提升。 Numpy/scipy 非常普遍,这是一个很大的优势。
标签: python opencv numpy scipy correlation