#include "LXCamera.h" #include #include #include #include #include "opencv2/opencv.hpp" #include "lxCamera/lx_camera_api.h" #pragma comment(lib,"LxCameraApi.lib") static char wait_key = '0'; QMap handleMap ; #define checkTC(state) {LX_STATE val=state; \ if(val != LX_SUCCESS){ \ if(val == LX_E_RECONNECTING){ \ qDebug()<< " device reconnecting";} \ else if(val == LX_E_NOT_SUPPORT){ \ qDebug()<< " not support";} \ else{ \ qDebug()<< DcGetErrorString(val); \ DcCloseDevice(handle); \ } \ } \ } LXCamera::~LXCamera() { destroyCamera(); } bool LXCamera::initCamera(const QString& serialNumber) { int device_num = 0; LxDeviceInfo* p_device_list = NULL; checkTC(DcGetDeviceList(&p_device_list, &device_num)); if (device_num <= 0) { qDebug() << "Not found any tof device."; return false; } m_handle = serialNumber.toStdString(); qInfo() << "Find tof device number = " << device_num; return true; } void LXCamera::destroyCamera() { stopCamera(); closeCamera(); } bool LXCamera::openCamera() { LxDeviceInfo device_info; DcHandle* handlePtr = new DcHandle(); LX_STATE lx_state = DcOpenDevice(LX_OPEN_MODE::OPEN_BY_SN, m_handle.c_str(), handlePtr, &device_info); for(int i=0;i<10;i++){ if (LX_SUCCESS == lx_state) { break; } qDebug() << "TofCamera Open Failed重启次数="<frame_state != LX_SUCCESS) { qDebug() << "new frame not correct"; return false; } //Depth if (frame_ptr->depth_data.frame_data != nullptr) { auto depth_data = frame_ptr->depth_data; cv::Mat depth_image = cv::Mat(depth_data.frame_height, depth_data.frame_width, CV_MAKETYPE(depth_data.frame_data_type, depth_data.frame_channel), depth_data.frame_data); depth_image.convertTo(imgMat, CV_8U, 1.0 / 16); cv::applyColorMap(imgMat, imgMat3D, cv::COLORMAP_JET); } //PointCloud auto retPCL = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME); retPCL = DcSaveXYZ(handle, ".\\Cache\\1.pcd"); }