添加蓝芯tof相机
parent
345f8216ae
commit
0b11a26c29
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,4 @@
|
|||||||
|
0 -1276.05 270.764
|
||||||
|
1 -416.796 261.033
|
||||||
|
2 1288 2124.25
|
||||||
|
0.402597 -0.00195196 0.915375 -1310.13
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,157 @@
|
|||||||
|
#include "LXCamera.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <thread>
|
||||||
|
#include <sstream>
|
||||||
|
#include "lxCamera/lx_camera_api.h"
|
||||||
|
|
||||||
|
#pragma comment(lib,"LxCameraApi.lib")
|
||||||
|
|
||||||
|
|
||||||
|
static char wait_key = '0';
|
||||||
|
static DcHandle handle = 0;
|
||||||
|
#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();
|
||||||
|
qDebug() << "Find tof device: " << p_device_list;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LXCamera::destroyCamera()
|
||||||
|
{
|
||||||
|
stopCamera();
|
||||||
|
closeCamera();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LXCamera::openCamera()
|
||||||
|
{
|
||||||
|
LxDeviceInfo device_info;
|
||||||
|
LX_STATE lx_state = DcOpenDevice(LX_OPEN_MODE::OPEN_BY_ID, m_handle.c_str(), &handle, &device_info);
|
||||||
|
if (LX_SUCCESS != lx_state) {
|
||||||
|
QString str = QString("open device failed, open_param: %1").arg(m_handle.c_str());
|
||||||
|
qDebug() << str;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LXCamera::closeCamera()
|
||||||
|
{
|
||||||
|
return DcCloseDevice(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LXCamera::startCamera()
|
||||||
|
{
|
||||||
|
//设置数据流
|
||||||
|
bool test_depth = false, test_rgb = false;
|
||||||
|
checkTC(DcGetBoolValue(handle, LX_BOOL_ENABLE_3D_DEPTH_STREAM, &test_depth));
|
||||||
|
checkTC(DcGetBoolValue(handle, LX_BOOL_ENABLE_2D_STREAM, &test_rgb));
|
||||||
|
|
||||||
|
//开启数据流
|
||||||
|
checkTC(DcStartStream(handle));
|
||||||
|
|
||||||
|
std::thread pthread = std::thread();
|
||||||
|
//pthread.detach();
|
||||||
|
|
||||||
|
//auto _time = std::chrono::system_clock::now();
|
||||||
|
|
||||||
|
//更新数据
|
||||||
|
auto ret = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME);
|
||||||
|
|
||||||
|
if (LX_SUCCESS != ret)
|
||||||
|
{
|
||||||
|
if (LX_E_RECONNECTING == ret) {
|
||||||
|
std::cout << "device reconnecting" << std::endl;
|
||||||
|
}
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
qDebug() << "TofCamera Open Failed!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "TofCamera Open Succeed!";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LXCamera::stopCamera()
|
||||||
|
{
|
||||||
|
return DcStopStream(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LXCamera::setTriggerSource(int mode)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LXCamera::takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D)
|
||||||
|
{
|
||||||
|
//更新数据
|
||||||
|
auto ret = DcSetCmd(handle, LX_CMD_GET_NEW_FRAME);
|
||||||
|
if (LX_SUCCESS != ret)
|
||||||
|
{
|
||||||
|
if (LX_E_RECONNECTING == ret) {
|
||||||
|
qDebug() << "device reconnecting";
|
||||||
|
}
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
|
//continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameInfo* frame_ptr = nullptr;
|
||||||
|
checkTC(DcGetPtrValue(handle, LX_PTR_FRAME_DATA, (void**)&frame_ptr));
|
||||||
|
if (!frame_ptr || frame_ptr->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);
|
||||||
|
//cv::Mat show;
|
||||||
|
depth_image.convertTo(imgMat, CV_8U, 1.0 / 16);
|
||||||
|
//applyColorMap(show, show, COLORMAP_JET);
|
||||||
|
//cv::namedWindow("depth", 0);
|
||||||
|
//cv::resizeWindow("depth", 640, 480);
|
||||||
|
//cv::imshow("depth", show);
|
||||||
|
}
|
||||||
|
|
||||||
|
//RGB
|
||||||
|
if (frame_ptr->rgb_data.frame_data != nullptr)
|
||||||
|
{
|
||||||
|
auto rgb_data = frame_ptr->rgb_data;
|
||||||
|
imgMat3D = cv::Mat(rgb_data.frame_height, rgb_data.frame_width,
|
||||||
|
CV_MAKETYPE(rgb_data.frame_data_type, rgb_data.frame_channel), rgb_data.frame_data);
|
||||||
|
|
||||||
|
//cv::namedWindow("rgb", 0);
|
||||||
|
//cv::resizeWindow("rgb", 640, 480);
|
||||||
|
//cv::imshow("rgb", rgb_image);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "camera.h"
|
||||||
|
#include "commonDefine.h"
|
||||||
|
|
||||||
|
class LXCamera : public Camera
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
~LXCamera();
|
||||||
|
|
||||||
|
virtual bool initCamera(const QString& serialNumber) override;
|
||||||
|
virtual void destroyCamera() override;
|
||||||
|
virtual bool openCamera() override;
|
||||||
|
virtual bool closeCamera() override;
|
||||||
|
virtual bool startCamera() override;
|
||||||
|
virtual bool stopCamera() override;
|
||||||
|
virtual bool takeAPic(cv::Mat& imgMat, cv::Mat&imgMat3D) override;
|
||||||
|
|
||||||
|
virtual bool setTriggerSource(int mode) override;
|
||||||
|
|
||||||
|
CameraType getCameraType() { return m_type; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
CameraType m_type = CameraType::LXTof;
|
||||||
|
std::string m_handle;
|
||||||
|
};
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
#include "TofCamera.h"
|
||||||
|
|
||||||
|
TofCamera::TofCamera(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
{}
|
||||||
|
|
||||||
|
TofCamera::~TofCamera()
|
||||||
|
{}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class TofCamera : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
TofCamera(QObject *parent);
|
||||||
|
~TofCamera();
|
||||||
|
};
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
** Meta object code from reading C++ file 'LXCamera.h'
|
||||||
|
**
|
||||||
|
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.4)
|
||||||
|
**
|
||||||
|
** WARNING! All changes made in this file will be lost!
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "../../../../src/LXCamera.h"
|
||||||
|
#include <QtCore/qbytearray.h>
|
||||||
|
#include <QtCore/qmetatype.h>
|
||||||
|
#if !defined(Q_MOC_OUTPUT_REVISION)
|
||||||
|
#error "The header file 'LXCamera.h' doesn't include <QObject>."
|
||||||
|
#elif Q_MOC_OUTPUT_REVISION != 67
|
||||||
|
#error "This file was generated using the moc from 5.9.4. It"
|
||||||
|
#error "cannot be used with the include files from this version of Qt."
|
||||||
|
#error "(The moc has changed too much.)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QT_BEGIN_MOC_NAMESPACE
|
||||||
|
QT_WARNING_PUSH
|
||||||
|
QT_WARNING_DISABLE_DEPRECATED
|
||||||
|
struct qt_meta_stringdata_LXCamera_t {
|
||||||
|
QByteArrayData data[1];
|
||||||
|
char stringdata0[9];
|
||||||
|
};
|
||||||
|
#define QT_MOC_LITERAL(idx, ofs, len) \
|
||||||
|
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
||||||
|
qptrdiff(offsetof(qt_meta_stringdata_LXCamera_t, stringdata0) + ofs \
|
||||||
|
- idx * sizeof(QByteArrayData)) \
|
||||||
|
)
|
||||||
|
static const qt_meta_stringdata_LXCamera_t qt_meta_stringdata_LXCamera = {
|
||||||
|
{
|
||||||
|
QT_MOC_LITERAL(0, 0, 8) // "LXCamera"
|
||||||
|
|
||||||
|
},
|
||||||
|
"LXCamera"
|
||||||
|
};
|
||||||
|
#undef QT_MOC_LITERAL
|
||||||
|
|
||||||
|
static const uint qt_meta_data_LXCamera[] = {
|
||||||
|
|
||||||
|
// content:
|
||||||
|
7, // revision
|
||||||
|
0, // classname
|
||||||
|
0, 0, // classinfo
|
||||||
|
0, 0, // methods
|
||||||
|
0, 0, // properties
|
||||||
|
0, 0, // enums/sets
|
||||||
|
0, 0, // constructors
|
||||||
|
0, // flags
|
||||||
|
0, // signalCount
|
||||||
|
|
||||||
|
0 // eod
|
||||||
|
};
|
||||||
|
|
||||||
|
void LXCamera::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
Q_UNUSED(_o);
|
||||||
|
Q_UNUSED(_id);
|
||||||
|
Q_UNUSED(_c);
|
||||||
|
Q_UNUSED(_a);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QMetaObject LXCamera::staticMetaObject = {
|
||||||
|
{ &Camera::staticMetaObject, qt_meta_stringdata_LXCamera.data,
|
||||||
|
qt_meta_data_LXCamera, qt_static_metacall, nullptr, nullptr}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const QMetaObject *LXCamera::metaObject() const
|
||||||
|
{
|
||||||
|
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *LXCamera::qt_metacast(const char *_clname)
|
||||||
|
{
|
||||||
|
if (!_clname) return nullptr;
|
||||||
|
if (!strcmp(_clname, qt_meta_stringdata_LXCamera.stringdata0))
|
||||||
|
return static_cast<void*>(this);
|
||||||
|
return Camera::qt_metacast(_clname);
|
||||||
|
}
|
||||||
|
|
||||||
|
int LXCamera::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
_id = Camera::qt_metacall(_c, _id, _a);
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
QT_WARNING_POP
|
||||||
|
QT_END_MOC_NAMESPACE
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
** Meta object code from reading C++ file 'TofCamera.h'
|
||||||
|
**
|
||||||
|
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.4)
|
||||||
|
**
|
||||||
|
** WARNING! All changes made in this file will be lost!
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "../../../../src/TofCamera.h"
|
||||||
|
#include <QtCore/qbytearray.h>
|
||||||
|
#include <QtCore/qmetatype.h>
|
||||||
|
#if !defined(Q_MOC_OUTPUT_REVISION)
|
||||||
|
#error "The header file 'TofCamera.h' doesn't include <QObject>."
|
||||||
|
#elif Q_MOC_OUTPUT_REVISION != 67
|
||||||
|
#error "This file was generated using the moc from 5.9.4. It"
|
||||||
|
#error "cannot be used with the include files from this version of Qt."
|
||||||
|
#error "(The moc has changed too much.)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QT_BEGIN_MOC_NAMESPACE
|
||||||
|
QT_WARNING_PUSH
|
||||||
|
QT_WARNING_DISABLE_DEPRECATED
|
||||||
|
struct qt_meta_stringdata_TofCamera_t {
|
||||||
|
QByteArrayData data[1];
|
||||||
|
char stringdata0[10];
|
||||||
|
};
|
||||||
|
#define QT_MOC_LITERAL(idx, ofs, len) \
|
||||||
|
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
|
||||||
|
qptrdiff(offsetof(qt_meta_stringdata_TofCamera_t, stringdata0) + ofs \
|
||||||
|
- idx * sizeof(QByteArrayData)) \
|
||||||
|
)
|
||||||
|
static const qt_meta_stringdata_TofCamera_t qt_meta_stringdata_TofCamera = {
|
||||||
|
{
|
||||||
|
QT_MOC_LITERAL(0, 0, 9) // "TofCamera"
|
||||||
|
|
||||||
|
},
|
||||||
|
"TofCamera"
|
||||||
|
};
|
||||||
|
#undef QT_MOC_LITERAL
|
||||||
|
|
||||||
|
static const uint qt_meta_data_TofCamera[] = {
|
||||||
|
|
||||||
|
// content:
|
||||||
|
7, // revision
|
||||||
|
0, // classname
|
||||||
|
0, 0, // classinfo
|
||||||
|
0, 0, // methods
|
||||||
|
0, 0, // properties
|
||||||
|
0, 0, // enums/sets
|
||||||
|
0, 0, // constructors
|
||||||
|
0, // flags
|
||||||
|
0, // signalCount
|
||||||
|
|
||||||
|
0 // eod
|
||||||
|
};
|
||||||
|
|
||||||
|
void TofCamera::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
Q_UNUSED(_o);
|
||||||
|
Q_UNUSED(_id);
|
||||||
|
Q_UNUSED(_c);
|
||||||
|
Q_UNUSED(_a);
|
||||||
|
}
|
||||||
|
|
||||||
|
const QMetaObject TofCamera::staticMetaObject = {
|
||||||
|
{ &QObject::staticMetaObject, qt_meta_stringdata_TofCamera.data,
|
||||||
|
qt_meta_data_TofCamera, qt_static_metacall, nullptr, nullptr}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const QMetaObject *TofCamera::metaObject() const
|
||||||
|
{
|
||||||
|
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *TofCamera::qt_metacast(const char *_clname)
|
||||||
|
{
|
||||||
|
if (!_clname) return nullptr;
|
||||||
|
if (!strcmp(_clname, qt_meta_stringdata_TofCamera.stringdata0))
|
||||||
|
return static_cast<void*>(this);
|
||||||
|
return QObject::qt_metacast(_clname);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TofCamera::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
_id = QObject::qt_metacall(_c, _id, _a);
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
QT_WARNING_POP
|
||||||
|
QT_END_MOC_NAMESPACE
|
||||||
Loading…
Reference in New Issue