当前位置: 首页 > web >正文

【01】大恒相机SDK C++开发 —— 初始化相机,采集第一帧图像、回调采集、关闭相机

文章目录

  • 1 初始化相机,采集第一帧图像
  • 2 回调方式采集图像
  • 3 视频教程

1 初始化相机,采集第一帧图像

#include <iostream>
#include <GalaxyIncludes.h>
using namespace std;int main()
{//首先,对相机资源进行初始化IGXFactory::GetInstance().Init();//第二部,枚举相机//先定义一个设备列表,用来存放枚举到的设备GxIAPICPP::gxdeviceinfo_vector cam_list;//枚举同一网段下的相机 无ALLIGXFactory::GetInstance().UpdateDeviceList(1000,cam_list);//枚举同一网络下所有相机 有ALL//IGXFactory::GetInstance().UpdateAllDeviceList(1000, cam_list);//打印设备的SN码、设备名称、制造商//枚举到相机后,就可以获取到相机的一些设备信息int cam_num = cam_list.size();GxIAPICPP::gxstring sn = cam_list[0].GetSN();GxIAPICPP::gxstring id = cam_list[0].GetDeviceID();GxIAPICPP::gxstring cmpy = cam_list[0].GetVendorName();std::cout << "检测到 " << cam_num << " 台相机 \r\n";std::cout << "SN码: " << sn << "\r\n";std::cout << "相机ID: " << id << "\r\n";std::cout << "制造商: " << cmpy << "\r\n";//打开相机,可以通过IP、SN、MAC、ID等唯一标识符打开相机//这里通过SN打开相机,打开相机的方式有三种: 只读、控制、独占CGXDevicePointer cam = IGXFactory::GetInstance().OpenDeviceBySN(sn,GX_ACCESS_MODE::GX_ACCESS_CONTROL);//控制方式打开//打开相机后,准备开始采集图像//首先打开流通道CGXStreamPointer cam_stream = cam->OpenStream(0);//默认打开第一个流通道//获取远端属性控制器CGXFeatureControlPointer cam_remote_control = cam->GetRemoteFeatureControl();//流通道开始采集cam_stream->StartGrab();//发送开采命令cam_remote_control->GetCommandFeature("AcquisitionStart")->Execute();//采集一帧图像CImageDataPointer img = cam_stream->GetImage(1000);//采集超时时间ms//获取并打印图像宽高uint16_t height = img->GetHeight();uint16_t width = img->GetWidth();std::cout << "图像高: " << height << "\t宽:"<<width<<"\r\n";return 0;}

在这里插入图片描述

2 回调方式采集图像

#include <iostream>
#include <GalaxyIncludes.h>
using namespace std;//注意:回调函数要放在main函数之前,否则报错//首先创建一个回调函数
//创建一个类,集成回调事件类int main()
{//对回调函数进行注册//声明采集回调事件的对象指针,并且创建指针对象ICaptureEventHandler* pCaptureHandler = NULL;pCaptureHandler = new MyCaptureEvent();//对相机资源进行初始化IGXFactory::GetInstance().Init();//第二部,枚举相机//先定义一个设备列表,用来存放枚举到的设备GxIAPICPP::gxdeviceinfo_vector cam_list;//枚举同一网段下的相机 无ALLIGXFactory::GetInstance().UpdateDeviceList(1000,cam_list);//枚举同一网络下所有相机 有ALL//IGXFactory::GetInstance().UpdateAllDeviceList(1000, cam_list);//打印设备的SN码、设备名称、制造商//枚举到相机后,就可以获取到相机的一些设备信息int cam_num = cam_list.size();GxIAPICPP::gxstring sn = cam_list[0].GetSN();GxIAPICPP::gxstring id = cam_list[0].GetDeviceID();GxIAPICPP::gxstring cmpy = cam_list[0].GetVendorName();std::cout << "检测到 " << cam_num << " 台相机 \r\n";std::cout << "SN码: " << sn << "\r\n";std::cout << "相机ID: " << id << "\r\n";std::cout << "制造商: " << cmpy << "\r\n";//打开相机,可以通过IP、SN、MAC、ID等唯一标识符打开相机//这里通过SN打开相机,打开相机的方式有三种: 只读、控制、独占CGXDevicePointer cam = IGXFactory::GetInstance().OpenDeviceBySN(sn,GX_ACCESS_MODE::GX_ACCESS_CONTROL);//控制方式打开//打开相机后,准备开始采集图像//首先打开流通道CGXStreamPointer cam_stream = cam->OpenStream(0);//默认打开第一个流通道//获取远端属性控制器CGXFeatureControlPointer cam_remote_control = cam->GetRemoteFeatureControl();//注册回调函数cam_stream->RegisterCaptureCallback(pCaptureHandler,NULL);//流通道开始采集cam_stream->StartGrab();//发送开采命令cam_remote_control->GetCommandFeature("AcquisitionStart")->Execute();//采集一帧图像//CImageDataPointer img = cam_stream->GetImage(1000);//采集超时时间ms//当还在采集主函数就执行完毕了,会报错,加一个阻塞getchar();//采集完毕,停止采集,关闭相机//远端属性控制器发送停止命令cam_remote_control->GetCommandFeature("AcqisitionStop")->Execute();//流通道停止采集cam_stream->StopGrab();//流通道关闭cam_stream->Close();//相机关闭cam->Close();//然后释放我们所有的相机资源IGXFactory::GetInstance().Uninit();return 0;}class MyCaptureEvent : public ICaptureEventHandler
{
public:void DoOnImageCaptured(CImageDataPointer& img, void* userparam){//获取并打印图像宽高uint16_t height = img->GetHeight();uint16_t width = img->GetWidth();std::cout << "图像高: " << height << "\t宽:" << width << "\r\n";}};

在这里插入图片描述

//注意:回调函数要放在main函数之前,否则报错
在这里插入图片描述

3 视频教程

【大恒工业相机SDK开发C++版】初始化相机,采集第一帧图像

http://www.xdnf.cn/news/16848.html

相关文章:

  • TGD第九篇:三维应用——视频边缘检测
  • Excel 知识点汇总
  • 爱普生002墨水与004墨水基本参数及支持机型
  • 行业热点丨仿真历史数据难以使用?如何利用几何深度学习破局,加速汽车工程创新
  • Java 17 新特性解析与代码示例
  • Linux的库制作与原理
  • Haproxy调度算法 - 静态算法介绍与使用
  • 为什么Android主线程与java主线程不同,不会退出?
  • 全栈:怎么把IDEA和Maven集成一下?
  • 前端框架Vue3(四)——组件通信及其他API
  • 分布内侧内嗅皮层的层Ⅱ或层Ⅲ的网格细胞(grid cells)对NLP中的深层语义分析的积极影响和启示
  • 一万字讲解Java中的IO流——包含底层原理
  • QtConcurrent::run函数
  • Nginx反向代理负载均衡
  • 常用设计模式系列(十六)—策略模式
  • Ubuntu 24.04 LTS 保姆级教程:安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包
  • 【YOLOv1】
  • 云服务器数据库
  • 【龙泽科技】汽车维护与底盘拆装检修仿真教学软件【风光580】
  • 机器学习①【机器学习的定义以及核心思想、数据集:机器学习的“燃料”(组成和获取)】
  • [Broken IOS] 配置CLI | 终端用户界面TUI
  • sqli-labs:Less-12关卡详细解析
  • C++异常处理的成本:理解与优化
  • Golang 调试技巧:在 Goland 中查看 Beego 控制器接收的前端字段参数
  • 文法中的间接左递归
  • Java【代码 21】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理
  • 量子测量的物理场景与理论
  • sqoop从pg导出数据到hadoop上
  • 【数据结构初阶】--二叉树选择题专辑
  • 【人工智能-15】OpenCV直方图均衡化,模板匹配,霍夫变换,图像亮度变换,形态学变换