OpenniGrabber :: OpenniGrabber(OpenniDriver& driver, const std::string& camera_serial) : m_driver(driver), m_camera_id(-1), m_camera_serial(camera_serial), m_subsampling_factor(1), m_need_pose_to_calibrate(false), m_max_num_users(15), m_body_event_detector(0), m_high_resolution(false), m_mirrored(false), m_custom_bayer_decoding(false), m_xml_config_file(DEFAULT_XML_CONFIG_FILE), m_track_users(true), m_get_infrared(false), m_has_rgb(true) { for (size_t i = 0; i < driver.numDevices(); ++i) { if (driver.deviceInfo(i).serial == camera_serial) { m_camera_id = i; break; } } if (m_camera_id < 0) { ntk_throw_exception("Could not find any device with serial " + camera_serial); } setDefaultBayerMode(); }
void *kinect_reader(void *threadid) { long tid; int count = 0; tid = (long) threadid; cout << "Thread for kinect reader n. " << tid << " started" << endl; int num_dev = ni_driver.numDevices(); #if 1 if (num_dev < NUM_KINECTS) { { while (true) { Sleep(1000); cout << "Error: Less than two Kinect were detected (" << ni_driver.numDevices() << ") for tid:" << tid << endl; } } } #endif OpenniGrabber *grabber = new OpenniGrabber(ni_driver, 0); grabber->setTrackUsers(false); grabber->connectToDevice(); grabber->start(); cout << "Before mesh generator" << endl; // Mesh generator MeshGenerator *mesh_generator = new MeshGenerator(); mesh_generator->setMeshType(MeshGenerator::PointCloudMesh); RGBDImage image; while (true) { count++; grabber->waitForNextFrame(); cout << "!" << tid; lock(tid); // got the frame grabber->copyImageTo(curr_frames[tid].image); curr_frames[tid].processed = false; unlock(tid); } }
int main() { ntk::ntk_debug_level = 1; OpenniDriver driver; ntk_dbg_print(driver.numDevices(), 1); OpenniGrabber grabber1(driver, 0); OpenniGrabber grabber2(driver, 1); grabber1.connectToDevice(); grabber2.connectToDevice(); grabber1.start(); grabber2.start(); RGBDImage image1, image2; OpenniRGBDProcessor post_processor; while (true) { // Wait for a new frame, get a local copy and postprocess it. grabber1.waitForNextFrame(); grabber1.copyImageTo(image1); grabber2.waitForNextFrame(); grabber2.copyImageTo(image2); post_processor.processImage(image2); cv::Mat1b debug_depth_img1 = normalize_toMat1b(image1.depth()); cv::Mat1b debug_depth_img2 = normalize_toMat1b(image2.depth()); cv::Mat3b debug_color_img1 = image1.mappedRgb(); cv::Mat3b debug_color_img2 = image2.mappedRgb(); cv::Mat3b debug_users1; cv::Mat3b debug_users2; image1.fillRgbFromUserLabels(debug_users1); image2.fillRgbFromUserLabels(debug_users2); imshow("depth1", debug_depth_img1); imshow("color1", debug_color_img1); imshow("users1", debug_users1); imshow("depth2", debug_depth_img2); imshow("color2", debug_color_img2); imshow("users2", debug_users2); cv::waitKey(10); } }