pykinect2 извлекает данные глубины из отдельного пикселя KinectV2
Я пытаюсь извлечь данные о глубине из пикселя, на который щелкают мышью. Это работает, когда я печатаю координаты X,Y. Это не работает, когда я пытаюсь напечатать данные о глубине пикселя. Код, который я пытаюсь использовать, изменен по сравнению с тем, как извлечь значения RGB для клика по пикселю. У меня проблема в том, как разобрать данные глубины для печати. Когда я запускаю это, я получаю TypeError: объект 'NoneType' не является подписным. Есть идеи?
Вот код:
kinect = PyKinectRuntime.PyKinectRuntime(PyKinectV2.FrameSourceTypes_Depth)
while True:
# --- Getting frames and drawing
if kinect.has_new_depth_frame():
frame = kinect.get_last_depth_frame()
frameD = kinect.get_last_depth_frame()
frameD = kinect._depth_frame_data
#frameD = frame.astype(np.uint8)
frame = frame.astype(np.uint8)
frame = np.reshape(frame, (424, 512))
output = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
def click_event(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print(x, y)
if event == cv2.EVENT_RBUTTONDOWN:
Pixel_Depth = output[x, y , 1]
print(Pixel_Depth)
#output = cv2.bilateralFilter(output, 1, 150, 75)
cv2.imshow('KINECT Video Stream', output)
cv2.setMouseCallback('KINECT Video Stream', click_event)
output = None
key = cv2.waitKey(1)
1 ответ
Чтобы заставить его работать, мне нужно было указать номер пикселя, а не координаты x,y "frameD = kinect._depth_frame_data"
Вот код:
rom pykinect2 import PyKinectV2
from pykinect2.PyKinectV2 import *
from pykinect2 import PyKinectRuntime
import numpy as np
import cv2
kinect = PyKinectRuntime.PyKinectRuntime(PyKinectV2.FrameSourceTypes_Depth)
while True:
# --- Getting frames and drawing
if kinect.has_new_depth_frame():
frame = kinect.get_last_depth_frame()
frameD = kinect._depth_frame_data
frame = frame.astype(np.uint8)
frame = np.reshape(frame, (424, 512))
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2RGB)
def click_event(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print(x, y)
if event == cv2.EVENT_RBUTTONDOWN:
Pixel_Depth = frameD[((y * 512) + x)]
print(Pixel_Depth)
##output = cv2.bilateralFilter(output, 1, 150, 75)
cv2.imshow('KINECT Video Stream', frame)
cv2.setMouseCallback('KINECT Video Stream', click_event)
output = None
key = cv2.waitKey(1)
if key == 27: break