phaseCorrelate 似乎是 OpenCV Python 包装器的一个未记录的函数。 C++ 函数的文档是 here .
当我从 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?我该怎么做?
最佳答案
您不需要将其转换为 cvMat。
错误表明您的输入应该是单 channel 的 float32
或 float64
。
因此相应地转换图像。
并且两张图片的大小应该相同。然后应用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
上发布错误报告。
关于python - OpenCV Python 中的 phaseCorrelate 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13630043/