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

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

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

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

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

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()
...