Является ли getPerspectiveTransform сломанным в opencv python2 wrapper?
Что-то похоже на "getPerspectiveTransform" в оболочке python2 для opencv. Для начала он принимает два аргумента вместо ожидаемых трех.
Итак, вместо первой оболочки:
cv.GetPerspectiveTransform(source,destination,3x3mat)
Теперь:
cv2.getPerspectiveTransform(?,?)
Если я попытаюсь вставить два набора из четырех квадрантных координат в качестве аргументов:
cv2.getPerspectiveTransform(first_set_of_corners, second_set_of_corners)
выводится следующая ошибка:
cv2.error: C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\imgwarp.
cpp:3194: error: (-215) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV
_32F) == 4
Если checkVectors не должен равняться четырем (следовательно, "quad" в четырехугольном), то я не уверен, что он хочет от меня. Как и все остальное в оболочке python2, эта функция полностью не документирована, поэтому я не знаю, сломалась она или, что более вероятно, что я делаю это неправильно. Кто-нибудь здесь смог заставить это работать правильно?
Ответы
Ответ 1
cv2.getPerspectiveTransform все равно не сломается.
Возможно, ваши точки не имеют длины 4, или они могут не быть номерами float32.
Попробуйте следующее:
import cv2
import numpy as np
img = cv2.imread('1original.jpg',0)
src = np.array([[50,50],[450,450],[70,420],[420,70]],np.float32)
dst = np.array([[0,0],[299,299],[0,299],[299,0]],np.float32)
ret = cv2.getPerspectiveTransform(src,dst)
print ret
Результат:
[[ 8.36097696e-01 -4.51944700e-02 -3.95451613e+01]
[ -4.51944700e-02 8.36097696e-01 -3.95451613e+01]
[ 6.45161290e-05 6.45161290e-05 1.00000000e+00]]