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

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;	//初始化相机时将触发模式设为Oncamera.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://xiahunao.cn/news/2661627.html

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

相关文章

BUG-由浏览器缩放引起PC端显示手机端视图

文章目录 来源解决 来源 启动Vue项目&#xff0c;用浏览器打开显示手机端视图&#xff0c;从vscode直接ctrl链接打开正常显示。 检查-未开启仿真&#xff0c;但仍显示错误。 解决 浏览器缩放问题。 修改为100%

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

Android 13 默认关闭 快速打开相机

介绍 在设置菜单的手势界面里&#xff0c;快速打开相机是默认开启的&#xff0c;此功能当开启时连续点击两次电源键会打开相机&#xff0c;现在客户需要默认关闭。 效果展示 修改 这里一开始想到的就是配置文件&#xff0c;在路径下果然找到了,从注释中看使我们需要的&#x…

CTF-Crypto练习

技能兴鲁初赛 from gmpy2 import * from Crypto.Util.number import *flag flag{I\m not gonna tell you the FLAG} # 这个肯定不是FLAG了&#xff0c;不要交这个咯p getPrime(2048) q getPrime(2048) m1 bytes_to_long(bytes(flag.encode()))e1 3247473589 e2 3698409…

【验证概括 SV的数据类型_2023.12.18】

验证概括 验证的过程是保证芯片实现符合规格说明书&#xff08;Specification&#xff0c;spec&#xff09;的过程 验证的两项任务&#xff1a; RTL sim&#xff1a;前仿真&#xff0c;验证功能 GLS-Gate (Level Simulation)&#xff1a;后仿真&#xff0c;验证功能和时序 验…

【小白专用】C# 压缩文件 ICSharpCode.SharpZipLib.dll效果:

插件描述&#xff1a; ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip、Tar 、 BZip2 类库,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL&#xff0c;底线是允许用在不开源商业软件中&#xff0c;意思就是免费使用。具体可访问ICSha…

svg学习

概念 svg 可缩放矢量图形 svg 使用xml格式定义图像 svg 形状 矩形 <rect> <?xml version"1.0" standalone"no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd&q…

polar CTF上传

WEB-上传 一、查看题目信息 二、漏洞分析 经过上传测试发现&#xff0c;这题过滤掉了<?&#xff0c;这样正常的一句话木马就没法上传&#xff0c;这里可以用utf-16编码绕过。因为utf-16占utf-8的两倍长度&#xff0c;上传时默认检测为utf-8,从而就能绕过检测成功上传。 同…

Paper Survey——NeRF SLAM

NeRF SLAM&#xff08;Neural Radiance Fields Simultaneous Localization and Mapping&#xff09;是一种结合神经辐射场&#xff08;NeRF&#xff09;和SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;的先进技术&#xff0c;用于实时地构建三维环境地图…

redis 从0到1完整学习 (十一):RedisObject 之 String 类型

文章目录 1. 引言2. redis 源码下载3. redisObject 管理 String 类型的数据结构4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;…

ERROR: No matching distribution found for torch==1.12.0+cu113

原因 pip install torch1.12.0cu113用pip安装torch时&#xff0c;出现&#xff1a; ERROR: No matching distribution found for torch1.12.0cu113好像不少用清华源的会出现这个问题 解决办法 pytorch官网&#xff1a;https://pytorch.org/get-started/previous-versions/ …

certum的ip证书购买流程

Certum是成立于欧洲的CA认证机构&#xff0c;经过二十几年的发展Certum已经成为欧洲知名的CA认证机构之一&#xff0c;拥有广泛的客户群体和合作伙伴。IP证书是Certum为只有公网IP地址的网站准备的数字加密服务。今天就随SSL盾小编了解购买Certum旗下的IP证书流程。 第一步&am…

分享72个NodeJs项目源码总有一个是你想要的

分享72个NodeJs项目源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1_bzxbmBlN8ga4-Ci1I0-0w?pwd6666 提取码&#xff1a;6666 项目名称 A lottery webapp …

惟客数据昆仑-开发云成功开源了!让研发更简单高效

​近期&#xff0c;WakeData惟客数据产品——昆仑-开发云成功开源。 今年4月&#xff0c;惟客数据完成了新一轮产品能力升级&#xff0c;与战略伙伴联合研发具有私有化部署能力的行业大模型 WakeMind 。 昆仑-开发云在可视化领域建模的基础上也引入了 WakeMind 的能力&#x…

英文建筑图纸翻译工程图纸翻译

建筑图纸是以图形和文字为语言&#xff0c;详细描绘了工程建筑、机械、设备等结构、形状、尺寸及其他要求。对于建筑图纸翻译&#xff0c;表达必须清楚准确。那么&#xff0c;如何确保英文建筑图纸翻译工程图纸翻译的准确性&#xff1f; 首先&#xff0c;我们需要深入了解建筑图…

#define定义宏

#define的定义范围 #define不光可以定义变量&#xff0c;常量&#xff0c;还可以定义几乎所有的东西&#xff0c;因为#define可以定义一串代码&#xff08;即宏&#xff09;&#xff0c;所以包含在代码中的东西都能被定义。 #define定义宏 定义是宏名必须于它的参数括号紧挨&am…

校园跑腿小程序源码系统:取快递+寄快递+食堂超市跑腿 带完整的搭建教程

现如今&#xff0c;越来越多的校园生活服务需求涌现出来。为了满足学生们的日常需求&#xff0c;校园跑腿小程序应运而生。这款小程序集成了取快递、寄快递、食堂超市跑腿等功能&#xff0c;为学生们提供了一个方便、快捷的生活服务平台。 以下是部分代码的示例&#xff1a; 系…

使用RFC跳过权限校验的方法

1、业务背景 由于业务流程的复杂性&#xff0c;用户往往只具备部分功能的权限&#xff0c;导致在操作自开发程序时出现权限问题。例如前台限制了用户对销售订单的修改&#xff0c;而自开发功能中又涉及单据修改&#xff0c;此时一味限制权限&#xff0c;则无法正常使用功能。 2…

API 开放平台项目(已整理,已废弃)

项目大纲 前端 React 18Ant Design Pro 5.x 脚手架Ant Design & Procomponents 组件库Umi 4 前端框架OpenAPI 前端代码生成 后端 Java Spring BootMySQL 数据库MyBatis-Plus 及 MyBatis X 自动生成API 签名认证&#xff08;Http 调用&#xff09;Spring Boot Starter&#…

L1-070:吃火锅

以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。 输入格式&#xff…