5

phaseCorrelateは、OpenCVPythonラッパーの文書化されていない関数のようです。C++関数のドキュメントはこちらです。

Pythonから関数を呼び出すと、次のエラーが発生します。

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

すべてのOpenCV2関数は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のように配列をに変換できます。CvMat

>>> 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 に答える