OpenCV Python中的phaseCorrelate函数

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?我该如何做到这一点?
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上发布错误报告。


我差点忘了提到我喜欢你的博客,非常有帮助。 - b_m
2
我能否使用phasecorrelate()的结果计算出两张图片之间的角度差异? - K K

1
根据文档,您可以按照以下方式将numpy数组转换为CvMat
>>> import cv, numpy
>>> a = numpy.ones((480, 640))
>>> mat = cv.fromarray(a)
>>> print mat.rows
480
>>> print mat.cols
640

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接