目标检测识别——大恒(DaHeng)相机操作与控制编程
文章目录
- 引言
- 正文
- 相关开发库的介绍
- 编程准备
- 配置引用头文件GalaxyIncludes.h
- 配置lib文件
- 具体编程过程
- 初始化和反初始化
- 枚举设备
- 开关设备
- 属性控制
- 属性控制器种类
- 图像采集控制和图像处理
- 采单帧
- 回调采集
- 总结
引言
- 在做老师的横向项目时,需要用大恒相机,需要将他的相机控制接入写的程序中,但是对于他的SDK并不了解,所以就好好看了他的SDK文件,并按照他的开发手册写了一个小的demo。
正文
相关开发库的介绍
- 在使用别人的代码过程中,有很多库自己都看不懂,这里做一下记录
- GxIAPICPPEx.dll:封装过后的通用并且统一的编程接口
- IGXFactory:初始化接口库,枚举设备,打开设备
- IGXDevice:设备对象,以此对象为入口进行属性控制、图像采集,获取相机事件等。
- IGXStream:流对象,从IGXDevice获得,专门负责图像采集相关职能。
- IGXFeatureControl:属性控制对象,分别从IGXDevice和IGXStream获得属性控制对象,
- IImageData:回调采集和采单帧的图像结构体,包括采集输出结果:图像buffer和图像信息等,还自带图像格式转换、图像增强的功能
- GXBitmap:负责图像的显示和存储功能,具体见示例程序

编程准备
- 首先需要下载安装对应设备的SDK文件,具体链接,相关SDK软件下载
- 这里是结合VS 2022进行打开,如何配置库,如何指定,相关的头文件。
- 在编程之前,需要配置好指定的项目文件
- 配置好所需要引用的头文件,Galaxyincludes.h头文件
- 设置需要引用的库文件,GxlAPICPPEx.lib库文件
配置引用头文件GalaxyIncludes.h
- 这里安装了SDK的话,需要指定你所运行的项目的配置文件,这里有两种写法,正常来说应该把对应的SDK复制在项目所在的文件里,这样项目的可移植性就比较强。但是我这里已经在工控机上进行 配置了,就直接写了绝对路径。

配置lib文件
-
这里必须配置GxIAPICPPEx.lib静态库文件,这个库是大恒相机对外编程的统一接口。接受一个新的项目文件,一般来说,配置文件里面有,但是属性里面没有配置,踩过坑之后发现需要重新配置。
-
找到GxlAPICPPEx.lib的路径

-
设置相关的配置文件

- 指定对应目录下方的静态库

具体编程过程
- 当前章节,主要是涉及到如何调用相关的开发库,对相机进行初始化,并对相机进行控制,同时保存对应的图片。
- 具体操作如下
- 初始化获取相关的资源, 反初始化释放所有的资源
- 枚举设备,获取所有资源
- 开关设备
初始化和反初始化
- 在调用GxlAPICPPEx.lib之前,相机必须要进行初始化,初始化是通过IGXFactory进行初始化的。
#include <iostream>
#include "IGXFactory.h"
#include "GalaxyException.h"using namespace std;int main()
{try {// 初始化相机实例IGXFactory::GetInstance().Init();}catch (CGalaxyException&e) {cout << "error code " << e.GetErrorCode() << endl;cout << "error description" << e.what() << endl;}std::cout << "Hello World!\n";
}
- 在初始化中遇到CGalaxyException找不到标识符的问题,解决办法如下,在vs中找到异常,会跳转到GXSmartPtr.h头文件中,添加
#include “GalaxyException.h”,具体如下

-
加上这句之后,后续就没有运行问题了,运行截图如下

-
在调用相机的进程退出之后,必须要进行反初始化,释放GxlAPICPPEx库函数调用的所有资源。
// DahengCameraStart.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// 基础应用#include <iostream>
#include "IGXFactory.h"
#include "GalaxyException.h"using namespace std;int main()
{try {// 初始化相机实例IGXFactory::GetInstance().Init();// 相机的反初始化,释放所有占有的资源IGXFactory::GetInstance().Uninit();}catch (CGalaxyException&e) {cout << "error code " << e.GetErrorCode() << endl;cout << "error description" << e.what() << endl;}std::cout << "Hello World!\n";
}
枚举设备
- 用户通过枚举设备来获取当前计算机中,可以使用的设备,并进行相关的调用
- 用户通过调用 IGXFactory::GetInstance().UpdateDeviceList 枚举当前所有可用设备,获取一个设备信息列表,列表类型为 GxIAPICPP::gxdeviceinfo_vector。
- 具体代码如下
int main()
{try {// 初始化相机实例IGXFactory::GetInstance().Init();// 使用GxIAPICPP列表类保存相关的信息GxIAPICPP::gxdeviceinfo_vector vectorDeviceInfo;// 第一个参数是扫描的时长,第二个参数是将获取的信息保存到对应的列表中IGXFactory::GetInstance().UpdateDeviceList(10000,vectorDeviceInfo);cout << "the camera num:" << vectorDeviceInfo.size() << endl;for (int i = 0; i < vectorDeviceInfo.size(); i++) {cout << vectorDeviceInfo[i].GetVendorName() << endl;cout << vectorDeviceInfo[i].GetModelName() << endl;}// 相机的反初始化,释放所有占有的资源IGXFactory::GetInstance().Uninit();}catch (CGalaxyException&e) {cout << "error code " << e.GetErrorCode() << endl;cout << "error description" << e.what() << endl;}std::cout << "Hello World!\n";
}
开关设备
- 控制设备关闭或者打开,由于这里使用的是ME2P-1230-23U3M/C相机,是通过USB3.0接口进行控制,并不是千兆网相机,所以MAC地址和IP地址都是空的,

- 控制相机关闭打开总共有四种方式
-
- SN 为设备序列号。
-
- UserID 为用户自定义名称(不支持 UserID 的设备此项为空字符串)。
-
- MAC 为设备 MAC 地址(非千兆网相机此项为空字符串)。
-
- IP 为设备 IP 地址(非千兆网相机此项为空字符串)。
-
- 打开对应函数的对应函数接口是
- IGXFactory::GetInstance().OpenDeviceBySN
- IGXFactory::GetInstance().OpenDeviceByUserID
- IGXFactory::GetInstance().OpenDeviceByMAC
- IGXFactory::GetInstance().OpenDeviceByIP
- 关闭对应相机的函数如下
//关闭设备之后不允许再调用 IDevice 以及设备的 IFeatureControl、IStream 的所有接口
objDevicePtr->Close();
- 最终的代码,我手上还没有相机,老师就给我代码让我先看一下,这里参考的是官方的参考手册代码
GxIAPICPP::gxdeviceinfo_vector vectorDeviceInfo;
IGXFactory::GetInstance().UpdateDeviceList(1000, vectorDeviceInfo);
if (vectorDeviceInfo.size()> 0)
{
//打开链表中的第一个设备
CGXDevicePointerobjDevicePtr;
GxIAPICPP::gxstringstrSN = vectorDeviceInfo[0].GetSN();
GxIAPICPP::gxstringstrUserID = vectorDeviceInfo[0].GetUserID();
GxIAPICPP::gxstringstrMAC = vectorDeviceInfo[0].GetMAC();
GxIAPICPP::gxstringstrIP = vectorDeviceInfo[0].GetIP();
//用户也可以直接指定打开的设备信息,下面代码中使用的信息为伪造信息,用户以实际设备为准
//GxIAPICPP::gxstring strSN = "GA0140100002";
//GxIAPICPP::gxstring strUserID = "MyUserName";
//GxIAPICPP::gxstring strMAC = "A1-0B-32-7C-6F-81";
//GxIAPICPP::gxstring strIP = "192.168.0.100";
objDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN(strSN, GX_ACCESS_EXCLUSIVE);
//objDevicePtr = IGXFactory::GetInstance().OpenDeviceByUserID(strUserID,
//GX_ACCESS_EXCLUSIVE);
//objDevicePtr = IGXFactory::GetInstance().OpenDeviceByMAC(strMAC,
//GX_ACCESS_EXCLUSIVE);
//objDevicePtr = IGXFactory::GetInstance().OpenDeviceByIP(strIP,
//GX_ACCESS_EXCLUSIVE);
}
属性控制
- 这部分东西比较琐碎,并且不是重点,就简单写一下
属性控制器种类
- 主要是通过IGXFeatureControl进行属性控制,分别是有两类控制对象,分别是设备Device和流Stream
-
- IGXFeatureControl IGXDevice::GetRemoteFeatureControl //包含主要设备信息,比如宽高、曝光增益等,一般用户主要使用此属性控制器即可。
-
- IGXFeatureControl IGXDevice::GetFeatureControl //包含一些本地属性,不同类型的设备具备的功能也不一样。
-
- IGXFeatureControl IGXStream::GetFeatureControl //流对象属性控制器,关于采集控制和采集数据统计的属性访问控制器。
-
图像采集控制和图像处理
采单帧
回调采集
总结
- 目前没有设备,就不看他的说明文档了,等我手里 有具体的相机了,再继续开始写一些控制相机的基础代码了,这里直接去看老师给的代码了, 不往外放了。
相关文章:
目标检测识别——大恒(DaHeng)相机操作与控制编程
文章目录 引言正文相关开发库的介绍编程准备配置引用头文件GalaxyIncludes.h配置lib文件 具体编程过程初始化和反初始化枚举设备开关设备 属性控制属性控制器种类 图像采集控制和图像处理采单帧回调采集 总结 引言 在做老师的横向项目时,需要用大恒相机,…...
国标GB28181视频监控平台EasyGBS视频无法播放,抓包返回ICMP是什么原因?
国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。国标GB28181视频监控平台部署简单、可拓展性强,支持将…...
如何正确使用npm常用命令
npm常用命令: 官方文档:CLI Commands | npm Docs 1. npm -v:查看 npm 版本 2. npm init:初始化后会出现一个 Package.json 配置文件,可以在后面加上 -y,快速跳到问答界面 3. npm install:会…...
无人机影像配准并发布(共线方程)
无人机影像 DEM 计算四个角点坐标(刚性变换) 像空间坐标(x,y,-f) 像空间坐标畸变纠正 deltax,deltay 已知(x,y),求解(X,Y, Z)或者(Lat,Lon) 这里的Z是DEM上获取的坐标和Zs为相机坐标的高程,如果均为已…...
openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符
文章目录 openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符23.1 时间日期操作符23.2 时间/日期函数23.3 TIMESTAMPDIFF23.4 EXTRACT23.5 date_part openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符 23.1 时间日期操作符 用户在使用时…...
C++OpenCV(7):图像形态学基础操作
🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 文章目录 膨胀与腐蚀形态学基础 膨胀与腐蚀 膨胀与腐蚀是数学形态学在图像处理中最基础的操作。 膨胀操作是取每个位置领域内最大值࿰…...
Appium+python自动化(二十二)- 控件坐标获取(超详解)
简介 有些小伙伴或者是童鞋可能会好奇会问上一篇中的那个monkey脚本里的坐标点是如何获取的,不是自己随便蒙的猜的,或者是自己用目光或者是尺子量出来的吧,答案当然是:NO。获取控件坐标点的方式这里宏哥给小伙伴们分享和讲解三种方…...
Tensorflow benchmark 实操指南
环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客 1. 下载Benchmarks源码 从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks,可以通过以下命令来下载 https://github.com/tensorflow/benchmarks 我…...
【linux】调试工具介绍
文章目录 前言一、kdb二、ftrace三、gdb 前言 在Linux内核调试过程中,可以使用各种工具和技术来诊断和解决问题。以下是一些常用的Linux内核调试方法: printk:printk是Linux内核中的打印函数,可以在代码中插入打印语句来输出调试…...
2.获取DOM元素
获取DOM元素就是利用JS选择页面中的标签元素 2.1 根据CSS选择器来获取DOM元素(重点) 2.1.1选择匹配的第一个元素 语法: document.querySelector( css选择器 )参数: 包含一个或多个有效的CSS选择器 字符串 返回值: CSS选择器匹配的第一个元素,一个HTMLElement对象…...
flask中redirect、url_for、endpoint介绍
flask中redirect、url_for、endpoint介绍 redirect 在 Flask 中,redirect() 是一个非常有用的函数,可以使服务器发送一个HTTP响应,指示客户端(通常是浏览器)自动导航到新的 URL。基本上,它是用来重定向用…...
《MySQL》第十二篇 数据类型
目录 一. 整数类型二. 浮点类型三. 日期和时间类型四. 字符串类型五. 枚举值类型六. 二进制类型七. 小结 MySQL 支持多种数据类型,学习好数据类型,才能更好的学习 MySQL 表的设计,让表的设计更加合理。 一. 整数类型 类型大小SIGNED(有符号)…...
Python与OpenCV环境中,借助SIFT、单应性、KNN以及Ransac技术进行实现的图像拼接算法详细解析及应用
一、引言 在当今数字化时代,图像处理技术的重要性不言而喻。它在无人驾驶、计算机视觉、人脸识别等领域发挥着关键作用。作为图像处理的一个重要部分,图像拼接算法是实现广阔视野图像的重要手段。今天我们将会讲解在Python和OpenCV环境下,如何使用SIFT、单应性、KNN以及Ran…...
苍穹外卖Day01项目日志
1.软件开发流程和人员分工是怎样的? 软件开发流程 一个软件是怎么被开发出来的? 需求分析 先得知道软件定位人群、用户群体、有什么功能、要实现什么效果等。 需要得到需求规格说明书、产品原型。 需求规格说明书 其中前后端工程师要关注的就是产品原…...
Netty学习(二)
文章目录 二. Netty 入门1. 概述1.1 Netty 是什么?1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势 2. Hello World2.1 目标加入依赖 2.2 服务器端2.3 客户端2.4 流程梳理课堂示例服务端客户端 分析提示(重要) 3. 组件3.1 EventLoop事件循…...
ReactRouterv5在BrowserRouter和HashRouter模式下对location.state的支持
结论:HashRouter不支持location.state 文档:ReactRouter v5 从文档可看到history.push()方法支持2个参数:path, [state] state即是location.state,常用于隐式地传递状态参数 但文档未提的是,仅适用于BrowserRouter&am…...
Aerotech系列文章(3)运动设置命令Motion Setup Commands
1.运动设置命令Motion Setup Commands 斜坡类型: 直线,S曲线,与正弦曲线 Enumerator: RAMPTYPE_Linear Linear-based ramp type. RAMPTYPE_Scurve S-curve-based ramp type. RAMPTYPE_Sine Sine-based ramp type. 函数原型&a…...
线性神经网络——softmax 回归随笔【深度学习】【PyTorch】【d2l】
文章目录 3.2、softmax 回归3.2.1、softmax运算3.2.2、交叉熵损失函数3.2.3、PyTorch 从零实现 softmax 回归3.2.4、简单实现 softmax 回归 3.2、softmax 回归 3.2.1、softmax运算 softmax 函数是一种常用的激活函数,用于将实数向量转换为概率分布向量。它在多类别…...
【Nodejs】Node.js开发环境安装
1.版本介绍 在命令窗口中输入 node -v 可以查看版本 0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性(比4.x多些),属于过渡产品,现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特性8.x 支持 ES6 特性 2.No…...
梅尔频谱(Mel spectrum)简介及Python实现
梅尔频谱(Mel spectrum)简介及Python实现 1. 梅尔频谱(Mel spectrum)简介2. Python可视化测试3.频谱可视化3.1 Mel 频谱可视化3.2 STFT spectrum参考文献资料1. 梅尔频谱(Mel spectrum)简介 在信号处理上,声信号(噪声信号)是一种重要的传感监测手段。对于语音分类任务…...
OpenClaw对话增强:nanobot镜像的聊天历史持久化方案
OpenClaw对话增强:nanobot镜像的聊天历史持久化方案 1. 为什么需要对话持久化 作为一个长期使用OpenClaw进行自动化任务的开发者,我经常遇到这样的困扰:当需要执行一个跨越数小时甚至数天的长周期任务时,传统的短对话模式会导致…...
SAP资产会计数据迁移:除了AS91,你还需要检查这些关键配置(传输日期、抵销科目详解)
SAP资产会计数据迁移:AS91之外的7个关键配置陷阱与解决方案 当你在凌晨三点盯着屏幕上不平的资产折旧凭证时,AS91的简单操作指南显然已经不够用了。作为经历过数十个SAP上线项目的顾问,我发现90%的资产数据迁移问题都源于那些容易被忽略的后台…...
Vue3最新版二维码生成避坑指南:从基础配置到企业级定制(附GitHub源码)
Vue3企业级二维码生成实战:从核心原理到性能优化 二维码作为连接物理世界与数字世界的桥梁,在现代Web应用中扮演着重要角色。本文将带您深入Vue3的二维码生成技术栈,不仅涵盖基础实现,更聚焦企业级应用中的高阶技巧与性能优化方案…...
VRCT:打破虚拟社交语言壁垒的实时翻译解决方案
VRCT:打破虚拟社交语言壁垒的实时翻译解决方案 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中,语言差异常常成为跨文化交流的最…...
MATLAB图像处理实战:用imfindcircles快速定位硬币边缘(附完整代码)
MATLAB图像处理实战:用imfindcircles快速定位硬币边缘(附完整代码) 在工业检测和医学影像分析中,圆形物体的精准定位往往是关键的第一步。无论是生产线上的硬币质量检查,还是显微镜下的细胞计数,快速准确地…...
SDMatte惊艳效果展示:高清透明PNG在海报/PPT/详情页真实复用案例
SDMatte惊艳效果展示:高清透明PNG在海报/PPT/详情页真实复用案例 1. 为什么你需要关注SDMatte 在日常设计工作中,抠图可能是最耗时但又必不可少的环节。无论是制作电商详情页、设计海报还是准备PPT素材,一个高质量的透明背景图片往往能大幅…...
别再拍脑袋定权重了!多目标规划中权重和ε值确定的3种科学方法
多目标规划中权重与约束值的科学确定方法:从理论到实践 1. 多目标规划的核心挑战与参数确定的重要性 在现实世界的决策场景中,我们很少遇到仅需优化单一目标的简单问题。无论是产品设计、资源分配还是投资组合管理,决策者往往需要同时考虑多个…...
重磅:中科院分区退出历史!| 附2026年《新锐期刊分区表》完整版EXCEL.
3月24日,2026版《新锐期刊分区表》正式发布,随后引起了广泛的关注和争议。议论最多的,竟然是《新锐期刊分区表》到底是不是“中科院分区表”?3 月 25 日,公众号“新锐学术”发布《“走进新锐分区”专题:即将…...
Lingbot-Depth-Pretrain-VitL-14处理复杂光照与反射场景效果展示
Lingbot-Depth-Pretrain-VitL-14处理复杂光照与反射场景效果展示 深度估计技术,简单来说就是让计算机像人眼一样,判断出画面中每个物体离我们有多远。这项技术在自动驾驶、机器人导航、增强现实等领域都扮演着关键角色。然而,当场景中出现一…...
Qwen3-ASR-0.6B WebUI实战:中文方言自动识别与结果导出操作
Qwen3-ASR-0.6B WebUI实战:中文方言自动识别与结果导出操作 1. 快速了解Qwen3-ASR-0.6B语音识别模型 Qwen3-ASR-0.6B是一个轻量级但性能强大的语音识别模型,专门为实际应用场景设计。这个模型只有6亿参数,但识别效果却相当出色,…...
