Azure Kinect DK 深度数据获取并使用opencv可视化

Azure Kinect DK 深度数据获取

一.寻找设备 ,打开设备

我这里使用的是默认的参数,因为我只有一个相机。

二.设置好参数,打开相机

参数的设置要好好选择,因为极大程度的影响你后面使用的一些功效,通过查看官方的硬件文档,可以适当选取合适的参数,我们目前主要关心的应该是深度数据,并且深度数据还有工作范围,不处于正常工作范围内的,可能会导致深度信息检测不出来,我实验的时候太近了的时候,只能检测出外部轮廓,中间的深度信息检测不出来。

在这里插入图片描述

三.获取捕捉

相机传感器中的数据一开始都是在捕捉当中,需要先获取捕捉,再进行之后的操作。

四.格式转换

先是从捕捉中获取 深度图像和彩色图像,然后将深度图像和彩色图像转换为opencv格式,注意深度数据是CV_16U,相当于他的最大数据为0-65535,但是为了他能在opencv中显示需把他转换为CV_8U格式,否则会报错。CV转换函数中的最后一个参数可选择为1或者1/255.0 。这代表了他们取值的不同和缩放比例。

五.显示以及释放内存,关闭设备。

opencv中imshow不支持16U的格式,但是为了能在图像中明显的显示深度信息,可以采用三通道8U_C3, 将不同区间端的深度用不同的颜色表示。

下附简单代码。

#pragma comment(lib, "k4a.lib")
#include <stdio.h>
#include <k4a/k4a.h>
#include <k4arecord/record.h>
#include <k4arecord/playback.h>
#include < iostream>
#include <stdlib.h>
#include <opencv2/core/core.hpp>  
#include <opencv2\opencv.hpp>
#include <opencv2/highgui/highgui.hpp>  
#include <k4a/k4a.hpp>
#include < cstdlib>

using namespace cv;
using namespace std;

	
int main()
{
k4a::capture capture;
const uint32_t device_count = k4a::device::get_installed_count();//查看设备个数
if (device_count == 0)	
{
	printf("No K4A devices found\n");
	return 0;
}

k4a::device device = k4a::device::open(K4A_DEVICE_DEFAULT);

k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;	//设定设备参数
config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
config.color_resolution = K4A_COLOR_RESOLUTION_1080P;
config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
config.synchronized_images_only = true;

device.start_cameras(&config);

k4a::image rgbImage;
k4a::image depthImage;

cv::Mat color_frame;		
cv::Mat depth_frame;

while (true)
{
	if (device.get_capture(&capture, std::chrono::milliseconds(0)))
	{
		rgbImage = capture.get_color_image();
		depthImage = capture.get_depth_image();
		
		color_frame = cv::Mat(rgbImage.get_height_pixels(), rgbImage.get_width_pixels(), CV_8UC4, rgbImage.get_buffer());
		depth_frame = cv::Mat(depthImage.get_height_pixels(), depthImage.get_width_pixels(), CV_16U, depthImage.get_buffer());

		depth_frame .convertTo(depth_frame , CV_8U, 1 );
		
		cv::imshow("color", color_frame);
		cv::imshow("depth", depth_frame );

		color_frame.release();
		depth_frame.release();

		capture.reset();
		if (waitKey(1) == 27)
			break;
	}
}
cv::destroyAllWindows();
device.close();
return 0;

}

  • 10
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值