Advertisement

五、获取RGB图像——Azure Kinect DK入门

阅读量:

微软 Azure Kinect开发工具文档
微软 Azure Kinect传感器 SDK官方开发文档
OpenCV官方技术文档
在学习过程中参考这些官方文档,并查阅相关资料以加深理解。

获取RGB图像

  • 目的
  • 设备
  • 基本函数
  • 代码实现
  • 结果
  • 总结

目的

  • 获取RGB图像

设备

  • 一台Azure Kinect DK

基本函数

返回类型 k4a_result_t 的函数 k4a_device_start_cameras 以参数 (设备句柄 device_handle) 和 (常量相机配置指针 config) 开始彩色摄像头与深度传感器的捕获操作。
该函数的功能是 启动彩色摄像头与深度传感器捕获数据。
参数包括:

  • 设备句柄 device_handle:指定当前设备的操作
  • 相机配置指针 config:包含所需相机设置的信息
  1. k4a_wait_result_t k4a_device_get_capture(k4a_device_t device_handle ,k4a_capture_t * capture_handle ,int32_t timeout_in_ms)
    该函数的功能是实现传感器数据采集过程。
    参数包括:
  • device_handle:该值用于标识具体的设备实例
  • capture_handle:该字段设置了当前传感器捕捉操作的唯一标识符
  • timeout_in_ms:此字段指定了函数阻塞等待捕获操作的时间长度(以毫秒表示的时间间隔)
  1. k4a_image_t k4a_capture_get_color_image(k4a_capture_t capture_handle)
    该函数用于返回与指定捕获相关的彩色图像数据
    参数为 capture_handle(表示传感器捕获的句柄)

  2. void k4a_image_release(k4a_image_t image_handle)
    函数作用:负责释放相关图像资源
    参数列表:
    image_handle字段用于标识待释放的图像资源

  3. int k4a_image_get_height_pixels(k4a_image_t *image_handle)
    **函数功能:返回图像的高度值(单位:像素)
    参数:
    image_handle 为图像句柄变量

  4. int k4a_image_get_width_pixels(k4a_image_t image_handle)
    **详细描述该函数的功能:它返回以像素表示的图像宽度
    参数列表:
    image_handle 为指向图像句柄的变量指针

uint8_t * k4a_image_get_buffer(k4a_image_t image_handle)
函数功能:返回图像缓冲区
参数列表:
image_handle: 图像句柄

  1. void k4a_device_stop_cameras(k4a_device_t device_handle
    该函数的功能是关闭所有彩色和深度相机的捕获。
    参数如下所述:
  • device_handle 为设备句柄标识符。

OpenCV函数:

  • namedWindow:创建一个自定义的窗口
  • imshow:在指定窗口展示结果

代码实现

代码如下

复制代码
    #include<k4a/k4a.h>
    #include<opencv2/core/core.hpp>
    #include<opencv2/highgui/highgui.hpp>
    #include<iostream>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	system("color 2f");
    	uint32_t device_number = k4a_device_get_installed_count(); // 识别已连接的设备
    	if (device_number == 0)
    	{
    		cout << "No k4a devices attached!" << endl;
    		return -1;
    	}
    	cout << "已连接设备数:" << device_number << endl;
    
    	k4a_device_t device = NULL; // 定义设备句柄
    	if (K4A_FAILED(k4a_device_open(0, &device))) // 打开设备
    	{
    		cout << "Failed to open k4a device!\n" << endl;
    		return -1;
    	}
    	cout << "成功打开设备!" << endl;
    
    	size_t serial_size = 0;
    	k4a_device_get_serialnum(device, NULL, &serial_size); // 获取序列号大小
    	char* serial = (char*)(malloc(serial_size)); // 开辟空间存储序列号
    	k4a_device_get_serialnum(device, serial, &serial_size); // 获取序列号
    	cout << "设备序列号为:" << serial << endl;
    	free(serial); // 释放为存储序列号开辟的空间
    
    	// 启动相机,配置相机参数
    	k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
    	config.camera_fps = K4A_FRAMES_PER_SECOND_30;
    	config.color_format = K4A_IMAGE_FORMAT_COLOR_BGRA32;
    	config.color_resolution = K4A_COLOR_RESOLUTION_720P;
    
    	if (K4A_FAILED(k4a_device_start_cameras(device, &config))) // 开始彩色与深度相机捕捉
    	{
    		cout << "Failed to start cameras!" << endl;
    		k4a_device_close(device);
    		return -1;
    	}
    	cout << "成功打开相机!" << endl;
    
    	while (true) // 图像是一帧一帧获取的,故用循环
    	{
    		k4a_capture_t sensor_capture; // 定义传感器捕获句柄
    		k4a_wait_result_t get_capture_result = k4a_device_get_capture(device, &sensor_capture, K4A_WAIT_INFINITE); // 读取传感器捕获,K4A_WAIT_INFINITE:一直等待捕获数据,直到数据可用、设备断开连接或发生其他错误
    		k4a_image_t rbgimage = k4a_capture_get_color_image(sensor_capture); // 获取RGB图像
    		 // 将相机获取的图像用OpenCV处理然后表示出来
    		Mat color_image = Mat(k4a_image_get_height_pixels(rbgimage), k4a_image_get_width_pixels(rbgimage), CV_8UC4,k4a_image_get_buffer(rbgimage));
    		namedWindow("color", WINDOW_FREERATIO); // 定义一个可以自己调节的窗口
    		imshow("color", color_image); // 展示经处理的图像
    		if (waitKey(1) == 27) // 如果键盘接受‘ESC’键,退出循环
    		{
    			cout << "程序结束" << endl;
    			break;
    		}
    		k4a_image_release(rbgimage); // 释放图像句柄
    	}
    	
    	k4a_device_stop_cameras(device); // 关闭相机
    	k4a_device_close(device); // 关闭设备
    	waitKey(0);
    	return 0;
    }

结果

在这里插入图片描述
在这里插入图片描述

总结

  • 学习并掌握了十个函数的用法,成功打开相机获取RGB图像

令你倾慕的一切事物背后都暗藏着默默承受的辛劳与付出。那些让你心驰神往的美好事物,并非突如其来的奇迹,而是早做打算的结果

我是 sido ,期待与你共攀高峰

全部评论 (0)

还没有任何评论哟~