From 15b58e8f635dc80a5478932d2260d2849fe53e03 Mon Sep 17 00:00:00 2001 From: hm Date: Thu, 19 Mar 2020 16:23:47 +0800 Subject: [PATCH] features: change support 2 kinects to multiply kinects --- OpenCV_TwoKinects/Source_2.cpp | 75 +++++++++++++++++----------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/OpenCV_TwoKinects/Source_2.cpp b/OpenCV_TwoKinects/Source_2.cpp index 101891f..945ab0f 100644 --- a/OpenCV_TwoKinects/Source_2.cpp +++ b/OpenCV_TwoKinects/Source_2.cpp @@ -15,34 +15,42 @@ using namespace std; using namespace cv; using namespace sen; -int main(int argc, char **argv) +int main(int argc, char** argv) { const uint32_t deviceCount = k4a::device::get_installed_count(); - if (deviceCount == 0) + std::cout << "current " << deviceCount << " kinect(s) are connected." << std::endl; + if (deviceCount < 1) { - cout << "no azure kinect devices detected!" << endl; + cerr << "device list is empty." << std::endl; + return -1; } - + k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL; config.camera_fps = K4A_FRAMES_PER_SECOND_30; config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED; config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32; config.color_resolution = K4A_COLOR_RESOLUTION_720P; config.synchronized_images_only = true; + std::vector sub_list(deviceCount); + cout << "Started opening sub devices..." << endl; + for (int i = 1; i < deviceCount; i++) + { + sub_list[i] = k4a::device::open(i); + sub_list[i].start_cameras(&config); + cout << "Opening sub device "<< i << endl; + } + cout << "Started opening master device..." << endl; + sub_list[0] = k4a::device::open(K4A_DEVICE_DEFAULT); + sub_list[0].start_cameras(&config); - cout << "Started opening K4A device..." << endl; - k4a::device dev_sub = k4a::device::open(1); - dev_sub.start_cameras(&config); - k4a::device dev_master = k4a::device::open(K4A_DEVICE_DEFAULT); - dev_master.start_cameras(&config); cout << "Finished opening K4A device." << endl; std::vector depthTextureBuffer; std::vector irTextureBuffer; uint8_t *colorTextureBuffer; - - k4a::capture capture_master; - k4a::capture capture_sub; + + //device:0 master device:1-x sub + std::vector capture_list(deviceCount); k4a::image depthImage; k4a::image colorImage; @@ -54,29 +62,19 @@ int main(int argc, char **argv) while (1) { - if (dev_master.get_capture(&capture_master, std::chrono::milliseconds(0)) && dev_sub.get_capture(&capture_sub, std::chrono::milliseconds(0))) + bool capture_status = true; + for (int i = 0; i < deviceCount; i++) { + capture_status = capture_status && sub_list[i].get_capture(&capture_list[i], std::chrono::milliseconds(0)); + } + + if (capture_status) + { + for (int i = 0; i < deviceCount; i++) { - depthImage = capture_master.get_depth_image(); - colorImage = capture_master.get_color_image(); - irImage = capture_master.get_ir_image(); - - ColorizeDepthImage(depthImage, DepthPixelColorizer::ColorizeBlueToRed, GetDepthModeRange(config.depth_mode), &depthTextureBuffer); - ColorizeDepthImage(irImage, DepthPixelColorizer::ColorizeGreyscale, GetIrLevels(K4A_DEPTH_MODE_PASSIVE_IR), &irTextureBuffer); - colorTextureBuffer = colorImage.get_buffer(); - - depthFrame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_8UC4, depthTextureBuffer.data()); - colorFrame = cv::Mat(colorImage.get_height_pixels(), colorImage.get_width_pixels(), CV_8UC4, colorTextureBuffer); - irFrame = cv::Mat(irImage.get_height_pixels(), irImage.get_width_pixels(), CV_8UC4, irTextureBuffer.data()); - cv::imshow("kinect depth map master", depthFrame); - cv::imshow("kinect color frame master", colorFrame); - cv::imshow("kinect ir frame master", irFrame); - } - - { - depthImage = capture_sub.get_depth_image(); - colorImage = capture_sub.get_color_image(); - irImage = capture_sub.get_ir_image(); + depthImage = capture_list[i].get_depth_image(); + colorImage = capture_list[i].get_color_image(); + irImage = capture_list[i].get_ir_image(); ColorizeDepthImage(depthImage, DepthPixelColorizer::ColorizeBlueToRed, GetDepthModeRange(config.depth_mode), &depthTextureBuffer); ColorizeDepthImage(irImage, DepthPixelColorizer::ColorizeGreyscale, GetIrLevels(K4A_DEPTH_MODE_PASSIVE_IR), &irTextureBuffer); @@ -85,14 +83,15 @@ int main(int argc, char **argv) depthFrame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_8UC4, depthTextureBuffer.data()); colorFrame = cv::Mat(colorImage.get_height_pixels(), colorImage.get_width_pixels(), CV_8UC4, colorTextureBuffer); irFrame = cv::Mat(irImage.get_height_pixels(), irImage.get_width_pixels(), CV_8UC4, irTextureBuffer.data()); - cv::imshow("kinect depth map sub", depthFrame); - cv::imshow("kinect color frame sub", colorFrame); - cv::imshow("kinect ir frame sub", irFrame); - } + cv::imshow(std::to_string(i)+"_kinect depth map master", depthFrame); + cv::imshow(std::to_string(i)+"_kinect depth map master", depthFrame); + cv::imshow(std::to_string(i)+"_kinect color frame master", colorFrame); + cv::imshow(std::to_string(i)+"_kinect ir frame master", irFrame); + } } if (waitKey(30) == 27 || waitKey(30) == 'q') { - dev_master.close(); + sub_list[0].close(); break; } }