該
有人可以解釋為什么轉換后的角點與顯示視窗的角不匹配嗎?
下面附上我的代碼:
import cv2
import numpy as np
def mouse_position(event, mouse_x, mouse_y, flags, param):
global corners
if event == cv2.EVENT_LBUTTONDOWN:
print(f"Corner #{len(corners) 1}: {(mouse_x, mouse_y)}")
corners.append((mouse_x, mouse_y))
corners = []
img = cv2.imread("Assets/Setup.jpg")
cv2.namedWindow("Select Corners of Pool Table")
cv2.setMouseCallback("Select Corners of Pool Table", mouse_position)
while len(corners) < 4:
cv2.imshow("Select Corners of Pool Table", img)
if cv2.waitKey(1) != -1:
print("Exiting program.")
cv2.destroyAllWindows()
exit(0)
cv2.destroyAllWindows()
corners = np.array(corners, dtype="float32")
height, width = img.shape[:2]
transform_matrix = cv2.getPerspectiveTransform(corners, np.array([(0, 0), (width, 0), (0, height), (width, height)],
dtype="float32"))
undistorted_image = cv2.warpPerspective(img, transform_matrix, (width, height))
transformed_corners = (transform_matrix @ np.hstack((corners, np.ones((corners.shape[0], 1)))).T).T.astype(int)
for corner in transformed_corners:
cv2.circle(undistorted_image, (corner[0], corner[1]), 30, (0, 0, 255), -1)
cv2.imshow("Frame", undistorted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
uj5u.com熱心網友回復:
您可以使用 cv2.perspectiveTransform 來變換點。
如果您想手動執行此操作,通過將 (x,y,1) 與 3x3 變換矩陣相乘,確保將結果除以其 z 值,因此它將是 (x',y',1) 并且是齊次點表示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483304.html
