Baumer工业相机堡盟相机如何使用NEOAPI SDK实现相机的连接(C++)

news2024/11/25 4:30:18

Baumer工业相机堡盟相机如何使用NEOAPI SDK实现相机的连接(C++)

  • Baumer工业相机
  • Baumer工业相机SDK技术背景
  • 代码分析
    • 第一步:先使用NEOAPI函数查找相机
    • 第二步:连接相机后对相机进行采图
    • 第三步:将采集的图像显示在UI界面上
  • Baumer工业相机使用NeoAPI SDK的优点
  • Baumer工业相机使用NeoAPI SDK开发的行业应用

Baumer工业相机

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机的NEOAPI SDK是目前最新版本的SDK类型,具有安装简单、测试方便、易于集成等特点。

Baumer工业相机SDK技术背景

工业相机的SDK(Software Development Kit)是为了方便开发人员对工业相机进行控制和图像采集而提供的一套软件工具。而Halcon是一款强大的机器视觉软件,能够进行图像处理、分析、识别等多种任务。

这里主要描述如何在C++的平台下实现相机连接的核心代码

代码分析

本文介绍使用NEOAPI SDK对Baumer工业相机进行开发时,可以简单使用Neoapi的函数与相机进行连接

第一步:先使用NEOAPI函数查找相机

C++环境下查找相机代码如下所示:

#pragma region //获取当前已连接相机信息列表  
NeoAPI::CamInfoList& infolist = NeoAPI::CamInfoList::Get();  // 新建相机信息List
infolist.Refresh();											 // 刷新相机信息List
NeoAPI::NeoString model;
for (NeoAPI::CamInfo info : infolist)
{
	model = info.GetModelName();
	std::cout << info.GetModelName() << " :: " << info.IsConnectable() << std::endl; // Print a list of all connected cameras with its connection status
}


#pragma endregion 

检索连接到系统中的相机的信息
有时,事先并不知道哪些相机可能被安装在系统中,以及它们是否可以使用。通过NeoAPI::CamInfoList和NeoAPI::CamInfo类,我们提供了一个简单的方法来查找。摄像机不需要连接就可以获得这些信息,甚至可以由其他程序使用。由于CamInfoList代表的是系统的当前状态,不应该有多个对象,因此它被实现为一个单子。

NeoAPI::CamInfoList::EnablePnPEventCallback()和NeoAPI::CamInfoList::GetPnPEvent()方法可用于获取相机是否与系统连接或断开的通知

下面则是详细的相机查询核心代码:

if (model != "")
{
	camera = NeoAPI::Cam();
	camera.Connect(model);              				// 通过相机名称连接相机

	NeoAPI::NeoString devName0 = camera.f().DeviceModelName;
	CString devName = (CString)devName0;
	camera.f().TriggerMode = NeoAPI::TriggerMode::On;	//初始化相机时将触发模式设为On
	camera.SetImageBufferCount(8);    
} 

第二步:连接相机后对相机进行采图

后续进行图像采集核心代码,如下所示:

// TODO: 在此添加控件通知处理程序代码
if (camera.IsConnected())
{		
	ContinueDisplay = FALSE;
	m_bSaveImage = true;
	NeoAPI::Image image = camera.GetImage();            // 获取相机图像

	Image = image;
	ToDisplayImage(image);								// 在Picturebox上显示图像
	GetDlgItem(IDC_BTNPLAY)->EnableWindow(TRUE);        // 实时按钮设置可用

}



第三步:将采集的图像显示在UI界面上

将NeoAPI::Image image图像转为Bitmap图像并显示在Picturebox上,
转换显示核心代码,如下所示:

//将NeoAPI::Image image图像转为Bitmap图像并显示在Picturebox上
void CGigeDemoDlg::ToDisplayImage(NeoAPI::Image image)
{

	unsigned char* imagebuffer = NULL;
	USES_CONVERSION;

	int width = 0, height = 0;
	width = (int)image.GetWidth();height = (int)image.GetHeight();	//获取当前图像像素长宽
	CString PixelFormat1 = (CString)image.GetPixelFormat();			//获取当前图像像素格式
	imagebuffer = (BYTE*)(image.GetImageData());			//获取当前图像数据
		
	CString ImageID1str;
	ImageID1str.Format(_T("%d"), (int)image.GetImageID());		    //获取当前图像FrameID



	#pragma region //保存图像功能
	if (m_bSaveImage && !m_strDirectory.IsEmpty())
	{
		CTime time = CTime::GetCurrentTime();
		CString strtime;
		strtime.Format(_T("\\%4d%2d%2d%2d%2d%2d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
		CString  strpath = m_strDirectory + strtime +"-"+ ImageID1str + ".jpg";
		SaveImageMono(strpath, imagebuffer, width, height);
		m_bSaveImage = false;
	}
	#pragma endregion 


	Gdiplus::Rect rc = Gdiplus::Rect(0, 0, width, height);

	#pragma region 黑白相机代码:像素格式为mono时转Bitmap的代码,彩色相机此处代码不同
	if (m_pBitmap == NULL)
	{
		m_pBitmap = new Gdiplus::Bitmap(width, height, PixelFormat8bppIndexed);
	}
	Gdiplus::BitmapData lockedbits;
	Gdiplus::ColorPalette * pal = (Gdiplus::ColorPalette*)new BYTE[sizeof(Gdiplus::ColorPalette) + 255 * sizeof(Gdiplus::ARGB)];
	pal->Count = 256;
	for (UINT i = 0;i < 256;i++)
	{
		UINT color = i * 65536 + i * 256 + i;
		color = color | 0xFF000000;
		pal->Entries[i] = color;
	}
	m_pBitmap->SetPalette(pal);
	Gdiplus::Status ret = m_pBitmap->LockBits(&rc, Gdiplus::ImageLockModeWrite, PixelFormat8bppIndexed, &lockedbits);
	BYTE* pixels = (BYTE*)lockedbits.Scan0;
	BYTE* src = (BYTE*)imagebuffer;
	for (int row = 0; row < height; ++row)
	{
		CopyMemory(pixels, src, lockedbits.Stride);
		pixels += width;
		src += width;
	}
	m_pBitmap->UnlockBits(&lockedbits);
	#pragma endregion 

	#pragma region //将图像显示在PictureControl控件上
	HDC hDC = ::GetDC(m_stcPicture.m_hWnd);
	Gdiplus::Graphics GdiplusDC(hDC);
	CRect rcControl;
	m_stcPicture.GetWindowRect(&rcControl);
	Gdiplus::Rect rtImage(0, 0, rcControl.Width(), rcControl.Height());
	GdiplusDC.DrawImage(m_pBitmap, rtImage, 0, 0, width, height, Gdiplus::UnitPixel);

	delete[]pal;
	::ReleaseDC(m_stcPicture.m_hWnd, hDC);

	delete m_pBitmap;
	m_pBitmap = NULL;

	#pragma endregion 


}

测试显示图像结果如下所示:

在这里插入图片描述

Baumer工业相机使用NeoAPI SDK的优点

Baumer工业相机使用NeoAPI SDK的优点包括以下几个方面:

  1. 统一的开发接口:NeoAPI SDK提供了统一的开发接口,使得开发人员可以方便地使用相同的API进行相机的控制和数据采集。这种统一的接口设计简化了开发过程,同时也提高了代码的可移植性和可维护性。

  2. 全面的功能支持:NeoAPI SDK涵盖了相机的各项功能,包括实时图像采集、图像存储、图像处理和分析等。开发人员可以通过SDK提供的接口实现对这些功能的灵活控制,满足不同应用场景下的需要。

  3. 高度优化的性能:Baumer工业相机与NeoAPI SDK相结合,可以实现卓越的性能。SDK针对相机硬件进行了优化,提供了高速的数据传输通道、低延迟的图像采集能力,以及稳定的图像处理性能,适用于高要求的工业自动化和视觉检测应用。

  4. 跨平台兼容性:NeoAPI SDK支持多种操作系统(如Windows、Linux等)和开发环境(如C++、C#等),使得开发人员可以在不同平台上使用相同的开发工具和接口进行相机应用的开发和集成。

  5. 丰富的算法库:NeoAPI SDK内置了丰富的图像处理和分析算法库,包括图像增强、边缘检测、模式识别等功能。这些算法可以帮助用户在应用程序中实现更复杂的图像处理和分析功能。

综上所述,Baumer工业相机使用NeoAPI SDK具有统一的开发接口、全面的功能支持、高度优化的性能、跨平台兼容性和丰富的算法库等优点,为工业视觉应用提供了强大的支持和便利。

Baumer工业相机使用NeoAPI SDK开发的行业应用

Baumer工业相机使用便捷的NeoAPI SDK进行开发在众多行业应用中发挥关键作用,包括但不限于:

  1. 制造业:在制造业中,Baumer工业相机搭配NeoAPI SDK可用于质量控制、产品检测和缺陷识别等任务。通过实时图像处理和精确的数据采集,相机能够帮助制造商提高生产效率,确保产品质量,减少废品率。

  2. 医疗行业:Baumer工业相机和NeoAPI SDK可应用于医疗影像设备、医疗器械生产中的质量检验、医学影像分析等领域。相机可用于拍摄和处理医学图像,帮助医生进行诊断、手术导航以及医疗影像数据的分析和管理。

  3. 农业领域:在农业领域,Baumer工业相机结合NeoAPI SDK可以用于农作物的生长监测、果蔬分选和质量检测,土壤分析等。这有助于提高农业生产效率,优化农业资源利用,改善农产品质量。

  4. 物流和包装行业:Baumer工业相机和NeoAPI SDK可应用于自动化包装线、快递分拣系统、防伪识别等物流和包装领域。通过图像识别和分析,相机可以提高包装线的速度和准确性,实现自动化分拣和包装。

  5. 汽车制造业:在汽车制造业中,Baumer工业相机搭配NeoAPI SDK可用于汽车零部件的质量检测、车身焊接检测、机器人视觉引导等应用。这有助于确保汽车零部件的精准生产和质量控制。

综上所述,Baumer工业相机结合NeoAPI SDK在制造业、医疗、农业、物流和包装以及汽车制造等行业中发挥着重要的作用,为这些领域提供了高效的图像采集和处理解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1343293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据缓存(Redis, Spring Cache)——后端

场景&#xff1a;给用户端展示的数据都是通过查询数据库所得&#xff0c;因此数据库访问压力会随着用户访问量增大而增加&#xff0c;从而导致系统响应慢、用户体验差。 方法&#xff1a;通过Redis缓存数据&#xff0c;减少查询数据库操作。&#xff08;Redis的数据是存储在内存…

vscode 支持c,c++编译调试方法

概述&#xff1a;tasks.jason launch.json settings.json一定要有&#xff0c;没有就别想跑。还有就是c 和c配置有区别&#xff0c;切记&#xff0c;下文有说 1.安装扩展插件。 2.安装编译器&#xff0c;gcc.我用的是x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z &#xf…

GLTF编辑器-位移贴图实现破碎的路面

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 位移贴图是一种可以用于增加模型细节和形状的贴图。它能够在渲染时针…

水准网、平面导线平差

东北大学测绘工程水准网、平面闭合导线间接平差法平差C#项目。 闭合导线程序界面&#xff1a; 水准网程序界面&#xff1a; 项目gitee地址&#xff1a; horizon: 东北大学测绘工程水准网&#xff0c;闭合导线间接平差法C#项目 (gitee.com) 注&#xff1a;此项目为本博主代人转…

DCDC--电感的选择和影响

1、感值L的影响 1.1、纹波Ripple的影响&#xff1a;感值越大&#xff0c;纹波越小 1.2、负载瞬态响应Load Transient的影响&#xff1a;感值越大&#xff0c;负载瞬态响应越差 2、直流电阻DCR的影响 2.1、效率Efficiency的影响 相同型号&#xff0c;感值越大&#xff0c;DC…

笔记1:基于锚框(先验框)的目标检测

一、边缘框&#xff08;bounding box&#xff09; 1.1 定义 边缘框&#xff1a;真实标注的物体位置 2.1 表示方式 1、&#xff08;x1,y1)和(x2,y2) 2、&#xff08;x1,y1)和w,h 二、锚框(anchor box)/先验框&#xff08;prior bounding box&#xff09; 2.1 定义 对边缘…

vue 拖拽通过子元素拖拽父元素指令

vue 拖拽通过子元素拖拽父元素指令 需求 拖拽头部 拖动整个框 // candrag.js中的代码如下 directive // 通过子元素 控制移动父元素&#xff0c; 如果 需要直接控制父元素可以再写一个自定义指令 或者改造下这个指令 export default {// 定义 Vue 插件install(Vue) {Vue.di…

抬头举手阅读YOLOV8NANO

首先用YOLOV8NANO得到PT模型&#xff0c;转换成ONNX,OPENCV调用&#xff0c;PYTHON,C,ANDROID都可以举手写字阅读YOLOV8NANO

QT上位机开发(开篇)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 可能是因为03年上大学的原因&#xff0c;那个时候学习的编译工具主要就是VC6&#xff0c;一个普遍被认为是古老的开发工具。如果要编写界面的话&am…

java设计模式学习之【访问者模式】

文章目录 引言访问者模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用电脑示例代码地址 引言 设想你是一个艺术馆的管理员&#xff0c;艺术馆里有各种各样的艺术品。每当有游客来访时&#xff0c;根据他们的兴趣&#xff0c;他们可能只想看画、雕塑或特定的…

私有部署ELK,搭建自己的日志中心(六)-- 引入kafka对采集日志进行削峰填谷

一、背景 首先&#xff0c;要说明一点&#xff0c;elk日志中心&#xff0c;是可以缺少kafka组件的。 其次&#xff0c;如果是研发环境下&#xff0c;机器资源紧张的情况下&#xff0c;也是可不部署kafka。 最后&#xff0c;因为kafka的部署是可以独立的&#xff0c;所以本文将…

成都服装(服饰)行业2023年度工作总结表彰大会暨五圣荟户外大本营签约发布会

凝心聚力谋发展&#xff0c;稳中求进谱新篇&#xff0c;由成都服装&#xff08;服饰&#xff09;行业协会主办&#xff0c;成都梵圣万汇文化发展有限公司承办的成都服装&#xff08;服饰&#xff09;行业2023年度工作总结表彰大会暨五圣荟户外大本营签约发布会于2023年12月28日…

数据库系统(六)数据库范式 | 函数依赖,一二三范式,BCNF,属性集闭包和正则覆盖

文章目录 1 好的关系设计的特征2 函数依赖关系3 Normal Forms 规范形式3.1 一二三范式3.1.1 基本概念3.1.2 判断是否满足3NF 3.2 BCNF3.2.1 基本概念3.2.2 判断是否满足BCNF3.2.3 分解得到BCNF 4 属性集闭包和正则覆盖4.1 属性集闭包求法4.2 属性集闭包应用4.2.1 测试某个属性集…

借助 Google Play 游戏电脑版新功能,加速业务增长

作者 / Google Play 游戏总监 Arjun Dayal Google Play 游戏电脑版测试版自去年发布以来&#xff0c;取得了巨大的发展。Google Play 游戏电脑版现在提供 3,000 多种游戏&#xff0c;覆盖 120 多个国家/地区的用户&#xff0c;为玩家提供各种类型的游戏。我们的热门移动游戏目录…

4-链表-合并两个有序链表

这是链表的第4题&#xff0c;来个简单算法玩玩。力扣链接。 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff…

Kindle使用USB数据线传书封面无法显示问题

以下内容只针对USB传书&#xff08;非越狱版本&#xff0c;越狱了有相关插件&#xff0c;这里不谈&#xff09;&#xff0c;不包括邮件传书。 恶心图如下&#xff1a; 直接把mobi/azw3/azw &#xff08;epub模式不能直接拷贝&#xff0c;kindle无法读取&#xff09;格式的电子…

99. 恢复二叉搜索树

#中序遍历&#xff0c;寻找插值位置并交换 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def recoverTree…

基于MINIST的手写数字体识别

一、算法简述 网络结构设计 通过创建MnistNet类&#xff0c;定义了包含两个卷积层和两个全连接层的深度神经网络。这个网络的设计灵感来自于经典的CNN结构&#xff0c;其中卷积层用于提取图像特征&#xff0c;而全连接层则用于将这些特征映射到最终的类别。 卷积与池化 卷…

新能源汽车高性价比电驱系统设计技术

版权声明&#xff1a;此资源由用户收集整理于网络&#xff0c;只用于交流学习&#xff0c;请勿用作它途。除非确实无法确认&#xff0c;我们都会注明作者和来源&#xff0c;无法确认情况我们标注来自网络。若涉及版权问题&#xff0c;烦请原作者联系我们&#xff0c;与您共同协…

【软件工程】漫谈增量过程模型:软件开发的逐步之道

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 增量过程模型&#xff08;Incremental Process Model&#xff09; 主要特点和阶段&#xff1a; 优点&#xff1…