一、3D相机简介

常见的三维视觉技术,包含双目、ToF、激光三角、结构光等

毫米级:双目、ToF、结构光(散斑)的精度为 mm 级,多见于消费领域,如:导航避障,VR/AR,刷脸支付等

微米级:线激光、结构光(编码)的精度是 um 级,主要应用在工业领域,如:表面缺陷检测、三维测量等

纳米级:另外,还有 nm 级精度的光谱共焦技术,可用于透明材质物体的三维测量

线激光3D相机,是一种基于三角测量原理,通过图像传感器,捕获激光发生器投射在物体表面的激光线信息,重构物体表面轮廓信息的三维相机。

以上文字来源于https://zhuanlan.zhihu.com/p/486516636

线激光3D相机品牌:基恩士keyence 埃尔森LMI 深视SSZN

本文将介绍深视智能的线激光常见问题以及编程方式

二、SSZN线激光

2.1常见问题

触发方式: 连续触发、IO触发、编码器触发

最大速度计算公式:

最大速度 = 细化点数 * 采样频率 * 0.8 * 脉冲当量

扫描长度计算公式:

扫描长度 = 细化点数 * 批处理点数 * 脉冲当量

脉冲当量一般情况下为0.001mm

批处理点数不变的情况下,如何提高扫描速度?

压缩景深,可以提高采样频率

压缩景深z轴范围变小,需要看样品高度是否支持压缩景深,如果样品扫描不全就不能压缩

2.2 SDK接口介绍

#ifndef SR7LINK__H
#define SR7LINK__H#include <stdio.h>#ifdef WIN32
#define  SR7_IF_API __declspec(dllexport)
#else
#define  SR7_IF_API extern
#endiftypedef void * SR7IF_Data;/// \brief                      高速数据通信的回调函数接口.
///    \param pBuffer              指向储存概要数据的缓冲区的指针.
///    \param dwSize               每个单元(行)的字节数量.
///    \param dwCount              存储在pBuffer中的内存的单元数量.
///    \param dwNotify             中断或批量结束等中断的通知.
///    \param dwUser               用户自定义信息.
///
typedef void (*SR7IF_CALLBACK)(char* pBuffer, unsigned int dwSize, unsigned int dwCount, unsigned int dwNotify, unsigned int dwUser);
typedef void (*SR7IF_BatchOneTimeCallBack)(const void *info, const SR7IF_Data *data);typedef struct {unsigned char    abyIpAddress[4];
} SR7IF_ETHERNET_CONFIG;#define SR7IF_ERROR_NOT_FOUND                     (-999)                  // 功能(相机)不存在.
#define SR7IF_ERROR_COMMAND                       (-998)                  // 该命令不支持.
#define SR7IF_ERROR_PARAMETER                     (-997)                  // 参数错误.
#define SR7IF_ERROR_UNIMPLEMENTED                 (-996)                  // 功能未实现.
#define SR7IF_ERROR_HANDLE                        (-995)                  // 句柄无效.
#define SR7IF_ERROR_MEMORY                        (-994)                  // 内存(溢出/定义)错误.
#define SR7IF_ERROR_TIMEOUT                       (-993)                  // 操作超时.
#define SR7IF_ERROR_DATABUFFER                    (-992)                  // 数据大缓冲区不足.
#define SR7IF_ERROR_STREAM                        (-991)                  // 数据流错误.
#define SR7IF_ERROR_CLOSED                        (-990)                  // 接口关闭不可用.
#define SR7IF_ERROR_VERSION                       (-989)                  // 当前版本无效.
#define SR7IF_ERROR_ABORT                         (-988)                  // 操作被终止,如连接被关闭、连接中断等.
#define SR7IF_ERROR_ALREADY_EXISTS                (-987)                  // 操作和现有的设置冲突.
#define SR7IF_ERROR_FRAME_LOSS                    (-986)                  // 批处理帧丢失.
#define SR7IF_ERROR_ROLL_DATA_OVERFLOW            (-985)                  // 无终止循环批处理出现溢出异常等.
#define SR7IF_ERROR_ROLL_BUSY                     (-984)                  // 无终止循环批处理读数据忙.
#define SR7IF_ERROR_MODE                          (-983)                  // 当前处理函数与设置的批处理模式有冲突.
#define SR7IF_ERROR_CAMERA_NOT_ONLINE             (-982)                  // 相机(传感头)不在线.
#define SR7IF_ERROR                               (-1)                    // 一般性错误,如设置失败、数据获取失败等.
#define SR7IF_NORMAL_STOP                         (-100)                  // 正常停止,如外部IO停止批处理操作等.
#define SR7IF_OK                                  (0)                     // 正确操作.#ifdef __cplusplus
extern "C" {
#endif///
/// \brief SR7IF_EthernetOpen   通信连接.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param pEthernetConfig      Ethernet 通信设定.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_EthernetOpen(unsigned int lDeviceId, SR7IF_ETHERNET_CONFIG* pEthernetConfig);///
/// \brief SR7IF_CommClose      断开与相机的连接.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_CommClose(unsigned int lDeviceId);///
/// \brief SR7IF_SwitchProgram  切换相机配置的参数.重启后不保存配方号.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param No:                  任务参数列表编号 0 - 63.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_SwitchProgram(unsigned int lDeviceId, int No);///
/// \brief SR7IF_GetOnlineCameraB   获取传感头B是否在线
/// \param lDeviceId            设备ID号,范围为0-3.
/// \return
///     <0:                     -982:传感头B不在线
///                             其他:获取失败
///     =0:                     传感头B在线
///
SR7_IF_API int SR7IF_GetOnlineCameraB(unsigned int lDeviceId);///
/// \brief SR7IF_StartMeasure   开始批处理,立即执行批处理程序.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Timeout              非循环获取时,超时时间(单位ms);循环模式该参数可设置为-1.
/// \return
///     <0:                     失败
///     =0:                     成功
///
SR7_IF_API int SR7IF_StartMeasure(unsigned int lDeviceId, int Timeout = 50000);/// \brief SR7IF_StartIOTriggerMeasure 开始批处理,硬件IO触发开始批处理,具体查看硬件手册.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Timeout              非循环获取时,超时时间(单位ms);循环模式该参数可设置为-1.
/// \param restart              预留,设为0.
/// \return
///     <0:                     失败
///     =0:                     成功
///
SR7_IF_API int SR7IF_StartIOTriggerMeasure(unsigned int lDeviceId, int Timeout = 50000, int restart = 0);///
/// \brief SR7IF_StopMeasure    停止批处理
/// \param lDeviceId            设备ID号,范围为0-3.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_StopMeasure(unsigned int lDeviceId);/// \brief SR7IF_ReceiveData    阻塞方式获取数据.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              返回数据指针.
/// \return
///     <0:                     获取失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_ReceiveData(unsigned int lDeviceId, SR7IF_Data DataObj);/// \brief SR7IF_ProfilePointSetCount 获取当前批处理设定行数
/// \param lDeviceId            设备ID号,范围为0-3
/// \param DataObj              预留,设置为NULL
/// \return                     返回实际批处理行数
///
SR7_IF_API int SR7IF_ProfilePointSetCount(unsigned int lDeviceId, const SR7IF_Data DataObj);/// \brief SR7IF_ProfilePointCount 获取批处理实际获取行数.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL.
/// \return                     返回批处理实际获取行数.
///
SR7_IF_API int SR7IF_ProfilePointCount(unsigned int lDeviceId, const SR7IF_Data DataObj);/// \brief SR7IF_ProfileDataWidth 获取数据宽度.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL.
/// \return                     返回数据宽度(单位像素).
///
SR7_IF_API int SR7IF_ProfileDataWidth(unsigned int lDeviceId, const SR7IF_Data DataObj);///
/// \brief SR7IF_ProfileData_XPitch 获取数据x方向间距.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL.
/// \return                     返回数据x方向间距(mm).
///
SR7_IF_API double SR7IF_ProfileData_XPitch(unsigned int lDeviceId, const SR7IF_Data DataObj);///
/// \brief SR7IF_GetEncoder     获取编码器值
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Encoder              返回数据指针,双相机为A/B交替数据
/// \return
///     <0:                     获取失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetEncoder(unsigned int lDeviceId, const SR7IF_Data DataObj, unsigned int *Encoder);///
/// \brief SR7IF_GetEncoderContiune 非阻塞方式获取编码器值
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Encoder              返回数据指针,双相机为A/B交替数据
/// \param GetCnt               获取数据长度
/// \return
///     <0:                     获取失败.
///     >=0:                    实际返回的数据长度.
///
SR7_IF_API int SR7IF_GetEncoderContiune(unsigned int lDeviceId, const SR7IF_Data DataObj, unsigned int *Encoder, unsigned int GetCnt);///
/// \brief SR7IF_GetProfileData 阻塞方式获取轮廓数据
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Profile              返回数据指针,双相机为A/B行交替数据
/// \return
///     <0:                     获取失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetProfileData(unsigned int lDeviceId, const SR7IF_Data DataObj, int *Profile);///
/// \brief SR7IF_GetProfileContiuneData 非阻塞方式获取轮廓数据
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Profile              返回数据指针,双相机为A/B行交替数据
/// \param GetCnt               获取数据长度
/// \return
///     <0:                     获取失败.
///     >=0:                    实际返回的数据长度.
///
SR7_IF_API int SR7IF_GetProfileContiuneData(unsigned int lDeviceId, const SR7IF_Data DataObj, int *Profile, unsigned int GetCnt);///
/// \brief SR7IF_GetIntensityData  阻塞方式获取亮度数据
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Intensity            返回数据指针,双相机为A/B行交替数据
/// \return
///     <0:                     获取失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetIntensityData(unsigned int lDeviceId, const SR7IF_Data DataObj, unsigned char *Intensity);///
/// \brief SR7IF_GetIntensityContiuneData 非阻塞获取亮度数据
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Intensity            返回数据指针,双相机为A/B行交替数据
/// \param GetCnt               获取数据长度
/// \return
///     <0:                     获取失败.
///     >=0:                    返回获实际数据行数.
///
SR7_IF_API int SR7IF_GetIntensityContiuneData(unsigned int lDeviceId, const SR7IF_Data DataObj, unsigned char *Intensity, unsigned int GetCnt);///
/// \brief SR7IF_GetBatchRollData 无终止循环获取数据
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param DataObj              预留,设置为NULL
/// \param Profile              返回轮廓数据指针,双相机为A/B行交替数据
/// \param Intensity            返回亮度数据指针,双相机为A/B行交替数据
/// \param Encoder              返回编码器数据指针,双相机为A/B交替数据
/// \param FrameId              返回帧编号数据指针
/// \param FrameLoss            返回批处理过快掉帧数量数据指针,双相机为A/B交替数据
/// \param GetCnt               获取数据长度
/// \return
///     <0:                     获取失败.
///     >=0:                    实际返回的数据长度.
///
SR7_IF_API int SR7IF_GetBatchRollData(unsigned int lDeviceId, const SR7IF_Data DataObj,int *Profile, unsigned char *Intensity, unsigned int *Encoder, long long *FrameId, unsigned int *FrameLoss,unsigned int GetCnt);///
/// \brief SR7IF_GetError       获取系统错误信息
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param pbyErrCnt            返回错误码数量
/// \param pwErrCode            返回错误码指针
/// \return
///     <0:                     获取失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetError(unsigned int lDeviceId, int *pbyErrCnt, int *pwErrCode);///
/// \brief SR7IF_GetBatchRollError   无终止循环获取数据异常计算值
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param EthErrCnt            返回网络传输导致错误的数量
/// \param UserErrCnt           返回用户获取导致错误的数量
/// \return
///     <0:                     获取失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetBatchRollError(unsigned int lDeviceId, int *EthErrCnt, int *UserErrCnt);///
/// \brief SR7IF_ClearError     暂无
/// \param lDeviceId
/// \param wErrCode
/// \return
///     <0:                     清除失败
///     =0:                     成功
///
SR7_IF_API int SR7IF_ClearError(unsigned int lDeviceId, unsigned short wErrCode);///
/// \brief SR7IF_GetVersion     获取库版本号.
/// \return                     返回版本信息.
///
SR7_IF_API const char *SR7IF_GetVersion();///
/// \brief SR7IF_GetModels      获取相机型号.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \return                     返回相机型号字符串.
///
SR7_IF_API const char *SR7IF_GetModels(unsigned int lDeviceId);///
/// \brief SR7IF_GetHeaderSerial   获取相机头序列号
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Head                 0:相机头A  1:相机头B
/// \return
///     !=NULL:                 返回相机序列号字符串.
///     =NULL:                  失败,相应头不存在或者参数错误.
///
SR7_IF_API const char *SR7IF_GetHeaderSerial(unsigned int lDeviceId, int Head);/// 高速数据通信相关
///
/// \brief SR7IF_HighSpeedDataEthernetCommunicationInitalize 初始化以太网高速数据通信.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param pEthernetConfig      Ethernet 通信设定.
/// \param wHighSpeedPortNo     Ethernet 通信端口设定.
/// \param pCallBack            高速通信中数据接收的回调函数.
/// \param dwProfileCnt         回调函数被调用的频率. 范围1-256
/// \param dwThreadId           线程号.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_HighSpeedDataEthernetCommunicationInitalize(unsigned int lDeviceId, SR7IF_ETHERNET_CONFIG* pEthernetConfig, int wHighSpeedPortNo,SR7IF_CALLBACK pCallBack, unsigned int dwProfileCnt, unsigned int dwThreadId);///
/// \brief SR7IF_SetOutputPortLevel      设置输出端口电平.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Port                 输出端口号,范围为0-7.
/// \param Level                输出电平值.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_SetOutputPortLevel(unsigned int lDeviceId, unsigned int Port, bool Level);///
/// \brief SR7IF_SetOutputPortLevel      读取输入端口电平.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Port                 输入端口号,范围为0-7.
/// \param Level                读取输入电平.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetInputPortLevel(unsigned int lDeviceId, unsigned int Port, bool *Level);///
/// \brief SR7IF_GetSingleProfile   获取当前一条轮廓(非批处理下,需在EdgeImaging中设置为2.5D模式)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param pProfileData         返回轮廓的指针.
/// \param pEncoder             返回编码器的指针.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetSingleProfile(unsigned int lDeviceId, int *pProfileData, unsigned int *pEncoder);///
/// \brief SR7IF_SetSetting     参数设定.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Depth                设置的值的级别.
/// \param Type                 设置类型.
/// \param Category             设置种类.
/// \param Item                 设置项目.
/// \param Target[4]            根据发送 / 接收的设定,可能需要进行相应的指定。无需设定时,指定为 0。
/// \param pData                设置数据.
/// \param DataSize             设置数据的长度.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_SetSetting(unsigned int lDeviceId, int Depth, int Type, int Category, int Item, int Target[4], void *pData, int DataSize);///
/// \brief SR7IF_GetSetting     参数设定.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Type                 获取类型.
/// \param Category             获取种类.
/// \param Item                 获取项目.
/// \param Target[4]            根据发送 / 接收的设定,可能需要进行相应的指定。无需设定时,指定为 0。
/// \param pData                获取的数据.
/// \param DataSize             获取数据的长度.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetSetting(unsigned int lDeviceId, int Type, int Category, int Item, int Target[4], void *pData, int DataSize);
///
/// \brief SR7IF_ExportParameters   将系统参数导出,注意只导出当前任务的参数.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param size                 返回参数表的大小.
/// \return
///     NULL:                   失败.
///     其他:                    成功.
///
SR7_IF_API const char *SR7IF_ExportParameters(unsigned int lDeviceId, unsigned int *size);///
/// \brief SR7IF_LoadParameters   将导出的参数导入到系统中.
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param pSettingdata         导入参数表指针.
/// \param size                 导入参数表的大小.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_LoadParameters(unsigned int lDeviceId, const char *pSettingdata, unsigned int size);///
/// \brief SR7IF_GetLicenseKey   返回产品剩余天数
/// \param RemainDay            返回剩余天数
/// \return
///     < 0:                     失败,参数错误或产品未注册
///     >=0:                     成功.
///
SR7_IF_API int SR7IF_GetLicenseKey(unsigned int lDeviceId, unsigned short *RemainDay);///
/// \brief SR7IF_GetCurrentEncoder   读取当前编码器值
/// \param value                    返回编码器值
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetCurrentEncoder(unsigned int lDeviceId, unsigned int *value);///
/// \brief SR7IF_GetCameraTemperature   读取相机温度,单位0.01摄氏度
/// \param tempA                        相机A温度值
/// \param tempB                        相机B温度值
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_GetCameraTemperature(unsigned int lDeviceId, unsigned int *tempA, unsigned int *tempB);//
typedef struct {int xPoints;                //x方向数据数量int BatchPoints;            //批处理数量unsigned int BatchTimes;    //批处理次数double xPixth;              //x方向点间距unsigned int startEncoder;  //批处理开始编码器值int HeadNumber;             //相机头数量int returnStatus;           //SR7IF_OK:正常批处理//SR7IF_NORMAL_STOP//SR7IF_ERROR_ABORT//SR7IF_ERROR_CLOSED
} SR7IF_STR_CALLBACK_INFO;
///
/// \brief SR7IF_SetBatchOneTimeDataHandler   设置回调函数,建议获取数据后另外开启线程进行处理(获取数据模式:批处理一次回调一次)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param CallFunc             回调函数.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_SetBatchOneTimeDataHandler(unsigned int lDeviceId, SR7IF_BatchOneTimeCallBack CallFunc);///
/// \brief SR7IF_StartMeasureWithCallback   开始批处理(获取数据模式:批处理一次回调一次)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param ImmediateBatch       0:立即开始批处理  1:等待外部开始批处理.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_StartMeasureWithCallback(int iDeviceId, int ImmediateBatch);///
/// \brief SR7IF_TriggerOneBatch   批处理软件触发开始(获取数据模式:批处理一次回调一次)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \return
///     <0:                     失败.
///     =0:                     成功.
///
SR7_IF_API int SR7IF_TriggerOneBatch(int iDeviceId);///
/// \brief SR7IF_GetBatchProfilePoint   批处理轮廓获取(获取数据模式:批处理一次回调一次)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Head                 0:相机头A  1:相机头B
/// \return
///     !=NULL:                 返回数据指针
///     =NULL:                  失败,无数据或者相应头不存在.
///
SR7_IF_API const int *SR7IF_GetBatchProfilePoint(const SR7IF_Data *DataIndex, int Head);///
/// \brief SR7IF_GetBatchIntensityPoint   批处理亮度获取(获取数据模式:批处理一次回调一次)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Head                 0:相机头A  1:相机头B
/// \return
///     !=NULL:                 返回数据指针
///     =NULL:                  失败,无数据或者相应头不存在.
///
SR7_IF_API const unsigned char *SR7IF_GetBatchIntensityPoint(const SR7IF_Data *DataIndex, int Head);///
/// \brief SR7IF_GetBatchEncoderPoint   批处理编码器获取(获取数据模式:批处理一次回调一次)
/// \param lDeviceId            设备ID号,范围为0-3.
/// \param Head                 0:相机头A  1:相机头B
/// \return
///     !=NULL:                 返回数据指针
///     =NULL:                  失败,无数据或者相应头不存在.
///
SR7_IF_API const unsigned int *SR7IF_GetBatchEncoderPoint(const SR7IF_Data *DataIndex, int Head);#ifdef __cplusplus
}
#endif
#endif //SR7LINK__H

2.3 使用流程

阻塞方式获取数据

2.4 qt中编程

设计简易界面

pro文件链接SDK

SR_THIRD_PARTY_PATH = $$PWD/3rdparty/SR_SdkDll# SR7Link
win32 {CONFIG(release, debug|release) {LIBS += -L$$SR_THIRD_PARTY_PATH/x64/ -lSR7Link}else {LIBS += -L$$SR_THIRD_PARTY_PATH/x64/ -lSR7Link}
}INCLUDEPATH += $$SR_THIRD_PARTY_PATH/include
DEPENDPATH  += $$SR_THIRD_PARTY_PATH/include

调用代码

#include "MainWindow.h"
#include "ui_MainWindow.h"#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"const int DEVICE_ID = 0;MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);SR7IF_ETHERNET_CONFIG SREthernetConFig;SREthernetConFig.abyIpAddress[0] = 192;SREthernetConFig.abyIpAddress[1] = 168;SREthernetConFig.abyIpAddress[2] = 0;SREthernetConFig.abyIpAddress[3] = 10;int ret = SR7IF_EthernetOpen(DEVICE_ID, &SREthernetConFig);ui->textBrowser->append(tr("SR7IF_EthernetOpen ret:%1").arg(ret));
}MainWindow::~MainWindow()
{int ret = SR7IF_CommClose(DEVICE_ID);ui->textBrowser->append(tr("SR7IF_CommClose ret:%1").arg(ret));delete ui;
}void MainWindow::on_btnStartMeasure_clicked()
{int ret = SR7IF_StartMeasure(DEVICE_ID, 50 * 1000);ui->textBrowser->append(tr("SR7IF_StartMeasure ret:%1").arg(ret));
}void MainWindow::on_btnReceiveData_clicked()
{int ret = SR7IF_ReceiveData(DEVICE_ID, DataObject);ui->textBrowser->append(tr("SR7IF_ReceiveData ret:%1").arg(ret));
}void MainWindow::on_btnGetData_clicked()
{int BatchPoint = SR7IF_ProfilePointCount(DEVICE_ID, DataObject);int m_DataWidth = SR7IF_ProfileDataWidth(DEVICE_ID, DataObject);ui->textBrowser->append(tr("BatchPoint:%1 DataWidth:%2").arg(BatchPoint).arg(m_DataWidth));int *HeightData = new int[BatchPoint * m_DataWidth];int ret =  SR7IF_GetProfileData(DEVICE_ID, DataObject, HeightData);ui->textBrowser->append(tr("SR7IF_GetProfileData ret:%1").arg(ret));unsigned char *grayData = new unsigned char[BatchPoint * m_DataWidth];ret =  SR7IF_GetIntensityData(DEVICE_ID, DataObject, grayData);ui->textBrowser->append(tr("SR7IF_GetIntensityData ret:%1").arg(ret));unsigned int *Encoder = new unsigned int[BatchPoint];ret =  SR7IF_GetEncoder(DEVICE_ID, DataObject, Encoder);ui->textBrowser->append(tr("SR7IF_GetEncoder ret:%1").arg(ret));cv::Mat grayMat = cv::Mat(BatchPoint, m_DataWidth, CV_8UC1, grayData);cv::imwrite("grayMat.bmp", grayMat);
//    cv::flip(grayMat, grayMat, 0);delete[] HeightData;delete[] grayData;delete[] Encoder;
}void MainWindow::on_btnStopMeasure_clicked()
{int ret = SR7IF_StopMeasure(DEVICE_ID);
}

机器视觉硬件篇--线激光3d相机介绍及编程相关推荐

  1. 3D视觉之线激光3D相机

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨飞鸢逐浪@知乎 来源丨https://zhuanlan.zhihu.com/p/48651663 ...

  2. 3D视觉 之 线激光3D相机

    3D视觉 之 线激光3D相机 飞鸢逐浪 专注于机器视觉.OpenCV.C++编程 84 人赞同了该文章 1 3D 视觉 常见的三维视觉技术,包含双目.ToF.激光三角.结构光等,如下图: 1)毫米级 ...

  3. 机器视觉初步13:3D相机介绍

    文章目录 1. 结构光(Structured Light) 2. 飞行时间(Time of Flight,ToF) 3. 双目视觉(Stereo Vision) 4. 线扫描(Line Scan) 5 ...

  4. 在线3D平面度检测机 大理石平台设计线激光3D成像技术

    [品牌]中天智能 [型号]ZTi-MLS300 [产地]东莞 [机架结构]大理石 [测量硬件]3D线激光 [测量尺寸类型]平面度.翘曲度.高度差.3D轮廓等 [测量工位]双工位 [产品上下料方式]流水 ...

  5. 海康机器人线激光立体相机获取体积测量开始时间点和结束测量时间点以及包裹四个顶角位置信息的可行办法

    349体积相机获取测量时间点和位置信息 简介:一种使用349体积相机获取体积测量开始时间点和结束测量时间点以及包裹四个顶角位置信息的可行办法. 本文档适用的问题 体积相机型号为:MV-DL2040-0 ...

  6. OpenCV使用Orbbec Astra 3D相机

    OpenCV使用Orbbec Astra 3D相机 使用Orbbec Astra 3D相机 介绍 安装说明 代码 使用Orbbec Astra 3D相机 介绍 本教程专门针对Orbbec 3D相机的A ...

  7. Udacity机器人软件工程师课程笔记(十九) - 3D感知介绍 - 主动/被动式传感器、RGB-D相机、点云

    3D感知介绍 目录 传感器 RGB-D相机 点云 1.传感器 主动式传感器是指向目标发射电磁波,然后收集从目标反射回来的电磁波信息的传感器,如合成孔径雷达等. 被动式传感器指只能收集地而目标反时来自太 ...

  8. 机器视觉——入门基础(一)—— 相机篇

    目录 一,相机就是CCD么? 二,像素. 三,像素直径. 四,CCD的大小. 五,快门速度. 六,增益. 七,1D相机(线扫描相机) 八,3D相机. 九,2.5D相机. 相机都有哪些种类?我们常说的C ...

  9. zed相机拆机_TX2入门教程硬件篇-外接双目相机ZED

    TX2入门教程硬件篇-外接双目相机ZED 说明:介绍如何在TX2安装ZED双目相机 步骤:准备:接上显示屏,键盘和鼠标 刷机:TX2通过jetpack3.0需要采用full模式完成刷机 确保有CUDA ...

最新文章

  1. 德鲁克的17条思想精髓,读懂管理的本质
  2. 合并单元格两行_28 HTML5标签学习——table单元格的合并
  3. 【Cocos2d入门教程二】Cocos2d-x基础概念
  4. MAP(Mean Average Precision)
  5. Python问题记录
  6. casbin-权限管理
  7. Python 加载二进制文件到 CkByteArray 对象
  8. linux服务器关闭web,linux关闭防火墙后还访问不了Web?已解决,关闭防火墙及清除防火墙策略...
  9. smartdns使用指南_OpenWrt之SmartDNS 使用教程(PLUS+版)
  10. C/C++/JAVA环境的搭建
  11. Python 操作谷歌浏览器
  12. java 问题 无法解析类型 java.lang.CharSequence。从必需的 .class 文件间接引用了它
  13. C语言求解黎曼 函数非平凡零点,51、黎曼函数的“非平凡零点 (1/2)z”是什么玩意?...
  14. python词频统计_用Python实现一个词频统计(词云+图)
  15. 百度飞桨“万有引力”2022首站落地苏州,全面启动中小企业赋能计划
  16. Transact-SQL语言基础语句
  17. C语言通讯录系统程序设计
  18. 【时空序列预测实战】风险时空预测?keras之ConvLSTM实战来搞定
  19. 【Daily Games——开发篇】:类QQ飞车商城的试衣间模块
  20. 简单五步看懂伦敦的银标

热门文章

  1. Error: package ‘ssr_pkg‘ not found
  2. js判断当前浏览器是什么浏览器
  3. 【人工智能】本科阅读书籍
  4. inno setup 安装setup并让web调用exe
  5. 联想微型计算机一体机b505,联想一体机b505电脑怎么样 联想一体机b505电脑的评测详解...
  6. 请转载网站删除本人的文章
  7. Metasploit进行网站漏洞扫描
  8. Leetcode刷题java之121买股票的最佳时机
  9. 智能网关实现智能电表水表数据采集方案
  10. 女士流行春装,时尚女装,韩版女士春装