Я нашел решение проблемы как
def get_dft(image):
coordinates = cv.findNonZero(image)
coordinates = coordinates.reshape(coordinates.shape[0], 2).astype(float)
y = coordinates[:, 1].reshape(coordinates.shape[0], 1)
x = coordinates[:, 0].reshape(coordinates.shape[0], 1)
t = cv.merge([x, y]) # used to convert to 2 channel
dft = cv.dft(t, flags=cv.DFT_COMPLEX_INPUT)
Я попробовал все эти клочковатые API и все, что казалось, провалилось по причинам, которые я не понимаю, но, к счастью, OpenCV
cv.merge(...)
работал.
Для многоканального вывода требуется несколько входных массивов и объединений.
Также я попытался ввести комплексные числа в функцию API OpenCV
cv.dft(...)
это не был правильный способ ввода комплексных чисел.
Документация OpenCV объясняет сложный ввод здесь
В нем говорится, что флаг cv.DFT_COMPLEX_INPUT
указывает, что ввод является сложным вводом. Если этот флаг установлен, вход должен иметь 2 канала. С другой стороны, по причине обратной совместимости, если вход имеет 2 канала, вход уже считается сложным
Обратите внимание, что проблема, с которой я также столкнулся, заключалась в преобразовании в два канала, произошедшего из-за того, что я неправильно понял структуру cv :: UMat (), которая требуется для ввода в функцию.
Резюме,
Если вы хотите ввести комплексные числа в функцию API OpenCV
cv.dft(...)
Ваш вход должен состоять из 2 каналов, для создания двухканального массива, функция OpenCV,
cv.merge(...)
ссылка на документацию , кажется, делает работу правильно, когда вы пытаетесь объединить несколько отдельных каналов.