[已删除]
[已删除]
  • 发布:2018-05-11 15:26
  • 更新:2023-10-11 18:06
  • 阅读:2834

图漾深度摄像头的基本使用方法

分类:HTML5+

搞到一款图漾的3d相机有好久了,一直也只是编译了sample代码跑起来看看样子,并没有着手看SDK以及开发的事。近几日对照SDK以及其中的SimpleView_FetchFrame例子,捋了捋头绪。代码如下:

include "../common/Utils.hpp"

int main(int argc, char* argv[])
{
//初始化
TYInitLib();

// 打开设备  
// 用设备ID打开设备,同时构建此设备的设备管理器。  
TY_DEV_HANDLE hDevice;  
TYOpenDevice("207000000866", &hDevice);  

// 使能组件  
// 按位或上组件结构体中的值,即可打开设备。  
TYEnableComponents(hDevice, TY_COMPONENT_RGB_CAM | TY_COMPONENT_DEPTH_CAM | TY_COMPONENT_IR_CAM_LEFT | TY_COMPONENT_IR_CAM_RIGHT);  

// 取得帧缓存大小。  
// 说一下这一步的目的,由于打开不同组件(打开哪些组件),以及不同组件参数设定(分辨率)的原因,每一帧数据的大小是不固定的,  
// 所以要用此函数计算一下当前设备以及当前设定下,一帧数据出来,需要多大的缓存buffer。  
// 因为后面需要压入buffer队列进行数据读取,所以要保证buffer的大小能否装下一帧数据。  
int32_t frameSize;  
TYGetFrameBufferSize(hDevice, &frameSize);  

// 驱动内部维护一个queue,用户往队列中enqueue空的buffer,  
// 设备用每一帧的framedata去填充这个空的buffer,填充后,将此buffer弹出队列(dequeue),返回给用户使用。  
// 这几个buffer是循环使用的,弹出被用户取出数据后,又会回到队列尾部。理论上将,只需要两个buffer即可循环使用。  
int frameBuffer_number = 3;  
char* frameBuffer[frameBuffer_number];  
for (int i = 0; i < frameBuffer_number; ++i)  
{  
    frameBuffer[i] = new char[frameSize];  
    TYEnqueueBuffer(hDevice, frameBuffer[i], frameSize);  
}  

//开始拍摄  
TYStartCapture(hDevice);  

//取景后不断有帧输出,需要循环取得帧数据,并进行解析输出。  
TY_FRAME_DATA frame;  
cv::Mat depth, irl, irr, color;  
while(1)  
{  
    // 取得帧  
    TYFetchFrame(hDevice, &frame, -1);  

    // 这句为整个程序的核心,解析得到的帧,解析为cv::Mat类型的图像,跟OpenCV对接后即可进行后续的处理。 defined in Utils.hpp line36  
    parseFrame(frame, &depth, &irl, &irr, &color, 0);  

    //图像显示  
    cv::imshow("Depth", depth);  
    cv::imshow("LeftIR", irl);  
    cv::imshow("RightIR", irr);  
    cv::imshow("Color", color);  

    //检测  
    if (cv::waitKey(1) == 'q') { break; }  

    // 这里就是申请的buffer循环使用的根本,每次buffer被dequeue用户取得帧后,在这个帧处理函数中,最后又把当前的buffer压入队列中,循环使用,  
    // 由于队列特性,队首出列,队尾入列,所以会有循环使用的样子。  
    TYEnqueueBuffer(hDevice, frame.userBuffer,http://www.appsaa.com  , frame.bufferSize);  
}  

//停止拍摄。  
TYStopCapture(hDevice);  
//关闭设备。  
TYCloseDevice(hDevice);  
//反初始化,注销API。  
TYDeinitLib();  
//delete释放内存。  
for (int j = 0; j < frameBuffer_number; ++j)  
{  
    delete frameBuffer[j];  
}  

return 0;  

}

0 关注 分享

要回复文章请先登录注册

1***@qq.com

1***@qq.com

请问怎么集成到uniapp中使用啊?
2023-10-11 18:06