OpenCV: Geometri c Преобразование с использованием перспективы деформации - PullRequest
0 голосов
/ 05 мая 2020

Рассмотрим изображение P (X, Y), которое лежит на следующей трехмерной плоскости: Z = aX + bY + c, Перспективная проекция P (X, Y) - это изображение Q (u, v) и Мне нужно вычислить Q из P, параметров калибровки камеры f, u0, v0 и параметров плоскости a, b, c. Я уже показал следующее: enter image description here

Принимая входные данные P, f, u0, v0 и a, b, c, мне нужно вычислить геометрию c преобразование с помощью процедуры OpenCV «warpPerspective»

Ниже приведен мой код -

import cv2
import numpy as np
import sys

# read arguments
if(len(sys.argv) != 8) :
    print(sys.argv[0], ": takes 7 arguments. Not ", len(sys.argv)-1)
    print("Expecting arguments: Image f u0 v0 a b c.")
    print("Example:", sys.argv[0], "input.jpg 3 4 5 6 7 8")
    sys.exit()

name_input = sys.argv[1]
f = float(sys.argv[2])
unot = float(sys.argv[3])
vnot = float(sys.argv[4])
a = float(sys.argv[5])
b = float(sys.argv[6])
c = float(sys.argv[7])

name_output = "output_q.png"

# read image
input_image = cv2.imread(name_input, cv2.IMREAD_COLOR)
if(input_image is None) :
    print(sys.argv[0], ": Failed to read image from: ", name_input)
    sys.exit()
cv2.imshow("input image: " + name_input, input_image)

rows, cols, bands= input_image.shape

camera_matrix = np.array([[f,0,unot],[0,f,vnot],[0,0,1]], dtype = np.float32)

output_image = cv2.warpPerspective(input_image,camera_matrix ,(cols, rows),flags=cv2.INTER_LINEAR,borderMode=cv2.BORDER_CONSTANT)

# cv2.imwrite(name_output,)
# print(out)
cv2.imshow("output image: " + name_output, output_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

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

...