vs+Qt+opencv+大恒相机开发(基础功能,适合初学者学习)

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

注:代码仅供参考,相互学习。
本意:帮助大家快速入手大恒相机,也留个记录后续优化。

配置环境: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
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值