5

phaseCorrelate 似乎是 OpenCV Python 包装器的未记录函数。C++ 函数的文档在这里

当我从 Python 调用该函数时,出现以下错误:

cv2.error: ..\..\..\src\opencv\modules\imgproc\src\phasecorr.cpp:495: error: (-215)    src1.type() == CV_32FC1 || src1.type() == CV_64FC1

每个 OpenCV 2 函数都使用 numpy 数组,我怀疑这个函数是从旧包装器中遗留下来的。也许我需要在调用函数之前将 numpy 数组转换为 CvMats?我怎么做?

4

2 回答 2

7

您不需要将其转换为 cvMat。

该错误表明您的输入应该是单通道float32float64单通道。

所以相应地转换图像。

并且两个图像应该具有相同的大小。然后应用phaseCorrelate函数,如下:

>>> src1 = cv2.imread('sudoku.jpg',0)   # load first image in grayscale
>>> src2 = cv2.imread('su1.png',0)      # load second image in grayscale
>>> src1 = np.float32(src1)             # convert first into float32
>>> src2 = np.float32(src2)             # convert second into float32  
>>> ret = cv2.phaseCorrelate(src1,src2) # now calculate the phase correlation
>>> ret
(-0.024777238426224812, 0.0011736626157130559)

(我的两个图像都是相同的,除了亮度变化。)

关于文档,您可以在code.opencv.org.

于 2012-11-29T17:43:23.500 回答
1

根据文档,您可以将numpy数组转换为 aCvMat如下:

>>> import cv, numpy
>>> a = numpy.ones((480, 640))
>>> mat = cv.fromarray(a)
>>> print mat.rows
480
>>> print mat.cols
640
于 2012-11-29T17:17:53.857 回答