Подтвердить что ты не робот

Является ли 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, эта функция полностью не документирована, поэтому я не знаю, сломалась она или, что более вероятно, что я делаю это неправильно. Кто-нибудь здесь смог заставить это работать правильно?

4b9b3361

Ответ 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]]