Python, CV2, PIL: выберите гибкий прямоугольник на изображении для преобразования перспективы

Представьте, что у вас есть фотография страницы в книге. Я хочу создать программу, которая открывает изображение и позволяет выбрать четыре точки для ограничительной рамки, а затем применить преобразование перспективы.

Я хочу иметь возможность сделать что-то похожее на это: image

Мне не нужен слой оси, просто возможность выбрать четыре точки ребра, а затем растянуть его до однородного прямоугольника.

В этом примере он, кажется, почти делает то, что я хотел бы достичь с помощью преобразования, за исключением того, что оно не расширяет перспективу, чтобы соответствовать всем четырем сторонам. Мне не удалось найти способ выбрать четыре граничные точки для каждого края на фотографии.

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('img.jpg')
rows,cols,ch = img.shape

print(img.shape)
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]],dtype='float32')
pts2 = np.float32([[110,120],[368,52],[14,350],[340,340]],dtype='float32')

M = cv2.getPerspectiveTransform(pts1,pts2)

dst = cv2.warpPerspective(img,M,(300,300),borderMode=cv2.BORDER_CONSTANT,
    borderValue=(255, 255, 255))

cv2.imwrite("IMAGE_NAME.png", dst)


plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

0 ответов

Другие вопросы по тегам