По какой-то причине, когда я использую функцию WarpPerspective () OpenCV, окончательное деформированное изображение не содержит всего исходного изображения. Левая часть изображения кажется обрезанной. Я думаю, причина, по которой это происходит, заключается в том, что искаженное изображение создается в крайнем левом положении холста для warpPerspective (). Есть ли способ исправить это? Спасибо
Ответ 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.
необходимо применить обратное преобразование для нахождения корректных точек.
Это заставит корректный x_offset и y_offset выравнивать Вашу верхнюю левую точку. Оттуда, чтобы найти корректную ограничительную рамку и соответствовать всему изображению отлично, необходимо выяснить скос (сколько оставленных наклонов изображения или после нормального, необратного, преобразования), и добавьте что сумма к x_offset и y_offset также.
РЕДАКТИРОВАНИЕ: Это - вся теория. Изображения являются несколькими пикселями прочь в моих тестах, я не уверен почему.