Перспективное преобразование с использованием бумаги - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть изображение с камеры телефона, в котором есть бумага. На изображении также указаны некоторые координаты, чтобы получить расстояние между ними. Поскольку соотношение сторон бумаги известно заранее (0,7072135785007072), я хочу исправить искажение так, чтобы все изображение выглядело так, как будто оно взято из вида сверху. Я собираю четыре угла бумаги и применяю opencv getPerspectiveTransform следующим образом:

pts1 = [[ 717.,  664.],
[1112.,  660.],
[1117., 1239.],
[ 730., 1238.]]

ratio=0.7072135785007072
cardH=math.sqrt((pts1[2][0]-pts1[1][0])*(pts1[2][0]-pts1[1][0])+(pts1[2][1]-pts1[1][1])*(pts1[2][1]-pts1[1][1]))
cardW=ratio*cardH;
pts2 = np.float32([[pts1[0][0],pts1[0][1]], [pts1[0][0]+cardW, pts1[0][1]], [pts1[0][0]+cardW, pts1[0][1]+cardH], [pts1[0][0], pts1[0][1]+cardH]])

M = cv2.getPerspectiveTransform(pts1,pts2)

с этой матрицей M Я преобразую все изображение следующим образом:

transformed = np.zeros((image.shape[1], image.shape[0]), dtype=np.uint8);
dst = cv2.warpPerspective(image, M, transformed.shape)
_ = cv2.rectangle(dst, (pts2[0][0], pts2[0][1]), (int(pts2[2][0]), int(pts2[2][1])), (0, 255, 0), 2)

Проблема в том, что это корректирует перспективу бумаги, но искажает общее изображение. Я не знаю почему. Входное изображение это , а соответствующее выходное изображение это . Во входном изображении точки M и O выровнены по горизонтали, но, к моему удивлению, после преобразования общего изображения точки M и O больше не выровнены по горизонтали, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...