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://www.hqwc.cn/news/307024.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乘势而上开新年!2024深圳深圳户外家具及休闲用品展览会三月开幕

中国户外家具市场在九十年代末开始崭露头角&#xff0c;随着国家经济的腾飞&#xff0c;尤其是房地产行业的迅猛发展&#xff0c;加上现代商业模式的建立和完善&#xff0c;产品和需求都以惊人的速度在发展。无论是国际知名品牌&#xff0c;还是国内的专业户外家具生产企业&…

Fiddler 抓包工具的安装与使用

今天分享Fiddler 抓包工具的安装与使用&#xff0c;基于HTTP应用层协议的抓包工具。 一、下载安装 1、下载地址&#xff1a; The Ultimate Web Debugging Tool - Download Fiddler Everywhere | Telerik 选择相应类型&#xff1a; 2、下载完成 3、安装 傻瓜式安装&#xf…

【OpenAI Q* 超越人类的自主系统】DQN :Q-Learning + 深度神经网络

深度 Q 网络&#xff1a;用深度神经网络&#xff0c;来近似Q函数 强化学习介绍离散场景&#xff0c;使用行为价值方法连续场景&#xff0c;使用概率分布方法实时反馈连续场景&#xff1a;使用概率分布 行为价值方法 DQN&#xff08;深度 Q 网络&#xff09; 深度神经网络 Q-L…

【JVM篇】Java是如何实现平台无关的?

Java是如何实现平台无关的? ✔️什么是平台无关性✔️平台无关性的实现✔️Java虚拟机✔️字节码✔️Java语言规范 ✔️扩展知识仓✔️平台无关性的好处✔️ 有哪些语言实现了平台无关?✔️Java中基本数据类型的大小都是确定的吗? ✔️什么是平台无关性 平台无关性就是一种语…

shiro1.10版本后-IniSecurityManagerFactory过期失效

1、问题概述&#xff1f; 今天在研究了shiro的新版本shiro1.13.0版本&#xff0c;发现用了很长时间的IniSecurityManagerFactory工厂失效了。 从下图中可以看出&#xff0c;在新版本中IniSecurityManagerFactory被打上了过期线了。 那么问题来了&#xff0c;新版本如何使用呢…

六、从0开始卷出一个新项目瑞萨RZN2L之loader app分离工程优化

六、loader app分离工程 6.1 概述 6.2 官方资料与不足 6.3 loader app分离工程的优化 6.3.1 自动调节合并appsection 6.3.2 loader中使用外设 6.3.3 app使用sram mirror 6.3.4 sram atcm同时使用 六、从0开始卷出一个新项目之瑞萨RZN2L loader…

2024年科技行业十大经济预测

当我们站在新的一年的风口浪尖上时&#xff0c;科技行业正准备迎接重大变革和创新&#xff0c;这些变革和创新将塑造2024年的经济格局。以下是未来一年科技行业的十大经济预测。 低代码&#xff1a;低代码和无代码平台从 3 年前开始被大规模的应用&#xff0c;发展到现在已经逐…

最优化方法Python计算:无约束优化应用——逻辑回归模型

S型函数 sigmoid ( x ) 1 1 e − x \text{sigmoid}(x)\frac{1}{1e^{-x}} sigmoid(x)1e−x1​将全体实数 R \text{R} R映射到 ( 0 , 1 ) (0,1) (0,1)&#xff0c;称为逻辑函数。其图像为 该函数连续、有界、单调、可微&#xff0c;性质量好。拟合函数为 F ( w ; x ) sigmoi…

阿里云服务器优惠活动大全

阿里云服务器优惠活动大全包括&#xff1a;云服务器新人特惠、云小站、阿里云免费中心、学生主机优惠、云服务器精选特惠、阿里云领券中心等&#xff0c;活动上阿里云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、轻量应用服务器2核2G3M带宽轻量服务器一年63元&#xff0c;…

电脑开机自动断电,简单4招,快速解决!

“不知道我的电脑最近是怎么回事&#xff0c;每次一开机就会出现自动断电的情况&#xff0c;有什么方法可以解决吗&#xff1f;” 在使用电脑时&#xff0c;由于电源供应不稳定或过热&#xff0c;以及各种硬件问题&#xff0c;可能会导致电脑开机自动断电。遇到这种情况&#x…

深度学习框架输出可视化中间层特征与类激活热力图

有时候为了分析深度学习框架的中间层特征&#xff0c;我们需要输出中间层特征进行分析&#xff0c;这里提供一个方法。 (1)输出中间特征层名字 导入所需的库并加载模型 import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.nn import functiona…

C语言 linux文件操作(一)

文章目录 一、linux文件权限1.1文件描述符1.2文件描述符的范围和默认值1.3打开文件和文件描述符1.4标准文件描述符1.5文件描述符的重定向和关闭1.6I/O 操作1.7使用文件描述符进行进程通信1.8资源限制 二、C语言文件读写2.1open 函数2.2 flags参数详解2.3 lseek 函数 一、linux文…