注:代码仅供参考,相互学习。
本意:帮助大家快速入手大恒相机,也留个记录后续优化。
配置环境:VS2019、OpenCV454、Qt5.14.2、大恒水星系列相机(gige)
优化:
2022/4/22
1、把.h文件中类成员的初始化写到构造函数中
2、重新整理相机类和主窗口类关系
2022/7/21(完)
1、基本上重写了一版,这次逻辑更加清晰,考虑更全面。
这次更新是为了这篇博客有始有终,优化到目前这个阶段对于初学者应该是够用了。
一、qt界面

二、ui框架

三、代码部分
(1)DH_MER.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_DH_MER.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include "GalaxyIncludes.h"
using namespace cv;
using namespace std;
class DH_MER : public QMainWindow, public IDeviceOfflineEventHandler, public ICaptureEventHandler
{
Q_OBJECT
public:
DH_MER(QWidget* parent = Q_NULLPTR);
public:
void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam);
void DoOnDeviceOfflineEvent(void* pUserParam); //掉线事件回调函数
public:
CGXDevicePointer m_objDevicePtr; //设备指针,指向打开的相机
CGXFeatureControlPointer m_objRemoteFeatureControlPtr; //(远端)设备属性控制器指针
CGXFeatureControlPointer m_objFeatureControlPtr; //本地和流属性控制器
CGXStreamPointer m_objStreamPtr; //流指针,指向相机打开的流
GX_DEVICE_OFFLINE_CALLBACK_HANDLE m_hDeviceOffline; //掉线事件
GX_DEVICE_CLASS_LIST objDeviceClass;//设备类型
CGXDeviceInfo m_deviceInfo;//设备信息
QString m_firmName;//厂商名称
QString m_modelName;//设备型号
QString m_serialNumName;//序列号
QString m_ipName;//ip地址
QString m_maskName;//掩码
QString m_macName;//MAC地址
int64_t m_width;
int64_t m_height;
QString m_bitDepth;
cv::Mat capturedImg; //相机采集的图片
//相机状态判断
bool isOpenCam; //相机是否打开
bool isOpenStream; //相机流是否打开
bool isOffline; //设备是否掉线
bool isTrigger; //相机是否触发
int exposeTime; //曝光时间
QString m_triggerMode;
QString m_triggerSource;
private:
Ui::DH_MERClass ui;
public slots:
void on_openDevice_clicked();
void on_closeDevice_clicked();
void on_startCapture_clicked();
void on_stopCapture_clicked();
void on_TriggerSoftware_clicked();
void getExposeTime();
public:
void showMatInLabel(Mat matImg);
void updateUI();
};
(2)DH_MER.cpp
#pragma once
#include "DH_MER.h"
#include<QWidget>
DH_MER::DH_MER(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
isOpenCam = false;
isOpenStream = false;
isOffline = false;
isTrigger = false;
exposeTime = 30000;
m_hDeviceOffline = NULL;
m_firmName = "";
m_modelName = "";
m_serialNumName = "";
m_ipName = "";
m_maskName = "";
m_macName = "";
m_width = 0;
m_height = 0;
m_bitDepth = "";
m_triggerMode = "";
m_triggerSource = "";
//曝光时间
connect(ui.exposeTime,&QLineEdit::editingFinished, this, &DH_MER::getExposeTime);
//初始化库
try
{
IGXFactory::GetInstance().Init();//GxIAPICPPEx库在使用之前必须执行初始化
}
catch (CGalaxyException& e)
{
cout << "错误码: " << e.GetErrorCode() << endl;
cout << "错误描述信息: " << e.what() << endl;
}
ui.TriggerMode->setEnabled(false);
ui.TriggerSource->setEnabled(false);
ui.TriggerSoftware->setEnabled(false

本文档详细记录了使用Qt、OpenCV和大恒水星系列相机进行图像采集应用的开发过程,包括环境配置、界面设计、代码实现和逻辑优化。通过实例展示了如何初始化相机、捕获图像、处理掉线事件等功能,并提供了完整项目的链接供读者参考学习。

351

被折叠的 条评论
为什么被折叠?



