我希望使用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空间中的任何更改都会扭曲投影。我如何解释这一点?我是否采取了完全错误的方法?如有任何答复,将不胜感激
目前没有回答
相关问题 更多 >
编程相关推荐