OpenCV warpperspective

По какой-то причине, когда я использую функцию WarpPerspective () OpenCV, окончательное деформированное изображение не содержит всего исходного изображения. Левая часть изображения кажется обрезанной. Я думаю, причина, по которой это происходит, заключается в том, что искаженное изображение создается в крайнем левом положении холста для warpPerspective (). Есть ли способ исправить это? Спасибо

16
задан Hien 22 May 2011 в 10:06
поделиться

1 ответ

Ответ Matt является хорошим началом, и он корректен в высказывании, что необходимо умножить homography на [1 110]

[ 1 , 0 , x_offset]
[ 0 , 1 , y_offset]
[ 0 , 0 ,    1    ]

, Но он не указывает, каковы x_offset и y_offset. В других ответах было сказано, просто берут перспективу, преобразовывают, но это не корректно. Вы хотите взять ОБРАТНУЮ перспективу, преобразовывают.

Просто, потому что точка 0,0 преобразовывает в, скажем,-10,-10, не означает, что смещение изображения 10,10 приведет к некадрированному изображению. Это вызвано тем, что точка 10,10 не обязательно отображается в 0,0.
то, Что Вы хотите сделать, узнают то, что указывает , был бы карта в 0,0, и сместите изображение на так очень. Чтобы сделать это, Вы берете инверсию ( cv2.invert) homography и применяете perspectiveTransform.

enter image description here не подразумевает: enter image description here

необходимо применить обратное преобразование для нахождения корректных точек.

enter image description here

Это заставит корректный x_offset и y_offset выравнивать Вашу верхнюю левую точку. Оттуда, чтобы найти корректную ограничительную рамку и соответствовать всему изображению отлично, необходимо выяснить скос (сколько оставленных наклонов изображения или после нормального, необратного, преобразования), и добавьте что сумма к x_offset и y_offset также.

РЕДАКТИРОВАНИЕ: Это - вся теория. Изображения являются несколькими пикселями прочь в моих тестах, я не уверен почему.

0
ответ дан 30 November 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: