Я новичок в OpenCV, и я хотел бы сравнить результаты программы на Python с моими вычислениями в OpenCV. Моя матрица содержит комплексные числа, так как это результат cvDFT. Python хорошо справляется со сложными числами и отображает их с научными обозначениями. Моя программа на C ++ неэффективна при попытке использовать std :: cout.
Я пытался сохранить массив чисел в std :: complex [] вместо double [], но он не компилируется.
Вот мой код и его результат:
CvMat *dft_A;
dft_A = cvCreateMat(5, 5, CV_64FC2); // complex matrix
double a[] = {
0, 0, 0, 0, 0,
1, 1, 1, 1, 1,
2, 2, 2, 2, 2,
3, 3, 3, 3, 3,
4, 4, 4, 4, 4
};
dft_A->data.db = a;
std::cout << "before : " << a[0] << std::endl;
cvDFT( dft_A, dft_A, CV_DXT_FORWARD); // DFT !
std::cout << "after : " << a[0] << std::endl;
>> before : 0
Вот то же самое в python, с выводом:
>>> a = np.mgrid[:5, :5][0]
>>> a
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]])
>>> np.fft.fft2(a)
array([[ 50.0 +0.j , 0.0 +0.j , 0.0 +0.j ,
0.0 +0.j , 0.0 +0.j ],
[-12.5+17.20477401j, 0.0 +0.j , 0.0 +0.j ,
0.0 +0.j , 0.0 +0.j ],
[-12.5 +4.0614962j , 0.0 +0.j , 0.0 +0.j ,
0.0 +0.j , 0.0 +0.j ],
[-12.5 -4.0614962j , 0.0 +0.j , 0.0 +0.j ,
0.0 +0.j , 0.0 +0.j ],
[-12.5-17.20477401j, 0.0 +0.j , 0.0 +0.j ,
0.0 +0.j , 0.0 +0.j ]])
>>>
Проблема, очевидно, исходит от второй метки, которая неэффективна с типом даты (CV_64FC2 для комплексного числа).
У меня вопрос: как мне вывести результат, чтобы я мог проверить, что мой код на Python работает так же, как мой код cpp / opencv?
Спасибо!