Как я могу дважды принять обратное преобразование Фурье изображения? - PullRequest
0 голосов
/ 10 октября 2019

Я хочу применить обратное дискретное преобразование Фурье к изображению дважды. Для этого я сделал следующее:

img = cv2.imread("a.png", 0)
img_back = cv2.idft(cv2.idft(img))
cv2.imwrite("f.png", img_back)

Но я получаю сообщение об ошибке:

    Traceback (most recent call last):
File "test2.py", line 26, in <module>
    img_back = cv2.idft(cv2.idft(img))
cv2.error: OpenCV(4.0.0) /Users/travis/build/skvark/opencv-python/opencv/modules/core/src/dxt.cpp:3335: error: (-215:Assertion failed) type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 in function 'dft'

Я не могу понять причину этого. Как я мог взять обратное преобразование Фурье изображения дважды?

1 Ответ

0 голосов
/ 10 октября 2019

В сообщении об ошибке указывается, что вход для функции idft должен быть 32-разрядным или 64-разрядным с плавающей запятой, с одним или двумя каналами (сложные данные представлены в виде двух каналов).

Этоошибка возникает из-за того, что img является целочисленным типом (как и ожидалось, потому что вы читаете его из файла PNG). Чтобы исправить это, преобразуйте его в тип с плавающей точкой:

img = cv2.imread("a.png", 0)
img = img.astype('f')
img_back = cv2.idft(cv2.idft(img))
...