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