需要找到从Kinect到投影仪的Z轴变化的单应性

2024-10-06 07:51:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望使用Kinect检测一个人在画面中的位置,然后投射到他们身上。我遇到的问题是如何解释Kinect和投影仪之间的透视差异。现在,我正在使用OpenCV中的findChessBoardCorners函数从投影仪POV和Kinect中查找点。看起来是这样的:

ret, cornersproj = cv2.findChessboardCorners(pattern_border, (9,6), None)
cv2.namedWindow("test", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("test", cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow('test', pattern_border)
cv2.waitKey(1)

retkct = False

while not retkct:
    color_frame = kinect.get_last_color_frame()
    color_img = color_frame.reshape(((color_height, color_width, 4))).astype(np.uint8)
    align_color_img  = get_align_color_image(kinect, color_img)
    retkct, cornerskct = cv2.findChessboardCorners(align_color_img, (9,6), None)

print('found')

cv2.destroyAllWindows()

h, status = cv2.findHomography(cornerskct, cornersproj)

我知道这很混乱——我要在代码变得“漂亮”之前让它工作起来

然后,我简单地使用透视函数和计算的单应矩阵h

warped = cv2.warpPerspective(image, h, res)

其中res是具有投影仪分辨率的元组

只要被跟踪的人停留在计算单应矩阵的平面上,这种方法就非常有效。Z空间中的任何更改都会扭曲投影。我如何解释这一点?我是否采取了完全错误的方法?如有任何答复,将不胜感激


Tags: 函数testimgcv2framecolorpattern投影仪