Qt+VS2019+大恒相机相机回调方式总结

一、前言

大恒驱动安装完成后,在安装目录有SDK调用文档,里面有更详细的调用介绍,此文档对近期做的Demo做一个回顾性总结。

二、调用流程概述

三、针对性内容介绍:

**1. 在执行相机操作之前,需要先执行此代码:**IGXFactory::GetInstance().Init(),通常是用于初始化相机的工厂实例。在使用多个相机时,你只需要调用一次该初始化方法。

**2.查询相机SN码:**vecDeviceInfo封装了一层的vector,多相机连接时,会包含多个SN码

GxIAPICPP::gxdeviceinfo_vector vecDeviceInfo;

cpp 复制代码
QStringList CameraConfig::getCameraSN()
{
	vecDeviceInfo.clear();
	IGXFactory::GetInstance().UpdateDeviceList(1000, vecDeviceInfo);
	QStringList listSN;
	for (int i = 0; i < vecDeviceInfo.size(); i++)
	{
		GxIAPICPP::gxstring strSN = vecDeviceInfo[i].GetSN();
		listSN.append(QString::fromStdString(strSN.c_str()));
	}
	return listSN;
}

**3.使用SN码连接对应的相机,并获得对应相机的设备指针:**CGXDevicePointer cameraDevicePtr

cpp 复制代码
curStr = ui->cmb_SN->currentText();
GxIAPICPP::gxstring strSN(curStr.toStdString().c_str());
cameraDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN(strSN, GX_ACCESS_EXCLUSIVE);

4,获得属性控制器指针:CGXFeatureControlPointer objFeatureControlPtr;

通过objFeatureControlPtr指针可以拿到相机的基本信息,比如相机功能模块具有哪些枚举内容,这个可以用来更新combobox的可选择项。同时可以获得当前的默认设置,用来初始化控件。

此属性控制器可以向相机写入曝光时间,增益等信息。

cpp 复制代码
objFeatureControlPtr = cameraDevicePtr->GetRemoteFeatureControl();
initCombobox(objFeatureControlPtr, "TriggerMode", ui->cmb_triggerMode);
initCombobox(objFeatureControlPtr, "TriggerSource", ui->cmb_triggerSource);
initCombobox(objFeatureControlPtr, "TriggerActivation", ui->cmb_triggerActivation);
initCombobox(objFeatureControlPtr, "PixelFormat", ui->cmb_PixelFormat);
initSpinBox(objFeatureControlPtr, "ExposureTime", slider_ExposeTime, "double");
	
initSpinBox(objFeatureControlPtr, "Gain", slider_Gain, "double");
initSpinBox(objFeatureControlPtr, "Width", slider_Width, "int");
initSpinBox(objFeatureControlPtr, "Height", slider_Height, "int");
initSpinBox(objFeatureControlPtr, "OffsetX", slider_OffsetX, "int");
initSpinBox(objFeatureControlPtr, "OffsetY", slider_OffsetY, "int");

5,获得流指针:CGXStreamPointer objStreamPtr;

cpp 复制代码
objStreamPtr = cameraDevicePtr->OpenStream(0);

6,注册回调事件:ICaptureEventHandler* pCaptureEventHandler;

使用回调采集的方式,需要继承:ICaptureEventHandler,并重写内部的方法:DoOnImageCaptured

cpp 复制代码
class Class_CaptureEventHandler  : public QObject, public ICaptureEventHandler
{
	Q_OBJECT

public:

    void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam);

注册事件

cpp 复制代码
pCaptureEventHandler =new Class_CaptureEventHandler(this, graphicsView_Camera);
objStreamPtr->RegisterCaptureCallback(pCaptureEventHandler,NULL);

7,开始采集

cpp 复制代码
objStreamPtr->SetAcqusitionBufferNumber(10);
//开启流通道采集
objStreamPtr->StartGrab();
//给设备发送开采命令
objFeatureControlPtr->GetCommandFeature("AcquisitionStart")->Execute();

8,结束采集

cpp 复制代码
objFeatureControlPtr->GetCommandFeature("AcquisitionStop")->Execute();
objStreamPtr->StopGrab();
//关闭流通道
objStreamPtr->Close();

四、效果展示:

由于没有安装镜头,所以采图的效果只能看到亮暗变化

五、关于回调的图片使用-Tips:

拿到的相机回调图片可以用队列的方式储存,并用计时器刷新到界面上去,详细的内容可参考下面这篇文章。

Qt+大恒相机回调图片刷新使用方式-CSDN博客

相关推荐
Queenie_Charlie4 小时前
stars(树状数组)
数据结构·c++·树状数组
会周易的程序员4 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
爱装代码的小瓶子4 小时前
【C++与Linux基础】进程间通讯方式:匿名管道
android·c++·后端
CoderCodingNo4 小时前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
LYOBOYI1234 小时前
qtcpSocket详解
c++·qt
晚霞的不甘4 小时前
Flutter for OpenHarmony实现 RSA 加密:从数学原理到可视化演示
人工智能·flutter·计算机视觉·开源·视觉检测
REDcker4 小时前
gRPC完整文档
服务器·网络·c++·网络协议·grpc
Mr_Xuhhh5 小时前
介绍一下ref
开发语言·c++·算法
王老师青少年编程5 小时前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(完善程序第2题)
c++·题解·真题·初赛·信奥赛·csp-s·提高组
Trouvaille ~5 小时前
【Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现
linux·c++·操作系统·守护进程·作业·会话·进程组