feat: add perspective transform
This commit is contained in:
21
utility.py
21
utility.py
@@ -1,6 +1,7 @@
|
||||
from PIL import Image
|
||||
import cv2
|
||||
import numpy as np
|
||||
import constants
|
||||
|
||||
def cv2_to_pil(cv_image: np.ndarray) -> Image.Image:
|
||||
"""
|
||||
@@ -12,4 +13,22 @@ def cv2_to_pil(cv_image: np.ndarray) -> Image.Image:
|
||||
|
||||
def image_to_numpy(self, image: Image.Image) -> np.ndarray:
|
||||
"""Конвертирует PIL Image в numpy array для OpenCV"""
|
||||
return np.array(image)
|
||||
return np.array(image)
|
||||
|
||||
def get_normals(H: np.ndarray, R: np.ndarray, T: np.ndarray) -> np.ndarray:
|
||||
n = cv2.decomposeHomographyMat(H, constants.K, R, T)
|
||||
return n
|
||||
|
||||
def estimate_transformation_matrix(src_pts: np.ndarray, dst_pts: np.ndarray) -> tuple[np.ndarray, float | None]:
|
||||
"""Оценивает матрицу трансформации на основе сопоставленных точек"""
|
||||
# Используем RANSAC для оценки матрицы гомографии
|
||||
H, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 3.0, maxIters=1000)
|
||||
return H
|
||||
|
||||
def calc_camera_matrix(w: float, h: float):
|
||||
f = constants._K_FOCUS_DISTANCE
|
||||
return np.array([
|
||||
[f, 0, w / 2],
|
||||
[0, f, h / 2],
|
||||
[0, 0, 1]
|
||||
])
|
||||
|
||||
Reference in New Issue
Block a user