Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C++)

news2024/11/15 8:21:27

在这里插入图片描述

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C++))

  • Baumer工业相机
  • Baumer工业相机的图像高速保存的技术背景
    • Baumer工业相机通过NEOAPI SDK函数图像高速保存
    • 在NEOAPI SDK里实现线程高速图像保存:
    • 工业相机高速图像保存测试演示图
  • Baumer工业相机通过NEOAPI SDK实现相机高速图像保存的优势
  • Baumer工业相机通过NEOAPI SDK实现相机高速图像保存的行业应用

Baumer工业相机

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

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

Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。​

在使用工业视觉软件集成工业相机时,常常需要将工业相机SDK中一些功能整合到图像处理软件中,方便项目的推进使用,Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

注意:本文是基于Baumer的NEOAPI SDK的基础上使用C#语言来实现相机的掉线重新连接。
NeoAPI可以实现自动掉线重连,无需额外的连接操作,可以通过PnPEvent事件确认当前的状态。

Baumer工业相机的图像高速保存的技术背景

工业相机的图像高速保存涉及到图像数据的快速采集、传输和存储,其技术背景包括以下方面:

  1. 高速采集:工业相机通常需要具备高速的图像采集能力,能够快速地捕获到每一帧图像,并确保图像质量和稳定性。

  2. 数据传输接口:为了实现图像的高速保存,工业相机通常会配备高速数据传输接口,如 GigE Vision、USB 3.0、Camera Link 等,以确保图像数据能够以高速稳定地传输到后端数据处理设备。

  3. 数据处理能力:工业相机需要具备高效的图像数据处理能力,能够对原始图像数据进行实时处理和编码,以减小数据流量和提高传输效率。

  4. 存储介质:为了快速保存图像数据,工业相机需要使用高速的存储介质,例如固态硬盘(SSD)或者专门用于高速数据写入的存储设备。

  5. 数据压缩技术:为了减小图像数据的存储空间和传输带宽占用,工业相机通常会采用高效的数据压缩技术,例如 JPEG、H.264 等,以确保高速保存的同时降低存储和传输成本。

  6. 驱动和软件支持:工业相机需要配备高效稳定的驱动程序和软件支持,以实现图像数据的高速保存和后续处理。

综上所述,工业相机图像高速保存的技术背景涉及到高速采集、数据传输接口、数据处理能力、存储介质、数据压缩技术以及驱动和软件支持等多个方面,这些技术因素共同保障了工业相机图像高速保存的稳定性、可靠性和效率。

Baumer工业相机通过NEOAPI SDK函数图像高速保存

下面为NEOAPI例程中图像高速保存核心C++代码,已经进行优化

#include <iostream>
#include <thread>
#include "neoapi/neoapi.hpp" 

void CGigeDemoDlg::OnBnClickedMultisaveimages()
{
	int state = ((CButton *)GetDlgItem(IDC_MULTISAVEIMAGES))->GetCheck();		
	
	if (state == 1)
	{
		if (camera.IsConnected())
		{
			camera.f().AcquisitionStop.Execute();					// 相机停止采集			
			ContinueDisplay = false;								// 设置图像显示线程变量为False,让图像显示线程停止运行			
			::WaitForSingleObject(ShowImage_hThread1, INFINITE);	// 等待显示图像线程结束			
			::WaitForSingleObject(ShowFrame_hThread1, INFINITE);	// 等待显示帧率线程结束
			camera.f().TriggerMode = NeoAPI::TriggerMode::Off;		// 初始化相机时将触发模式设为Off
			camera.f().AcquisitionStart.Execute();					// 相机重新开始采集,FrameID将会从0开始计算
			GetDlgItem(IDC_MULTISAVEIMAGES)->EnableWindow(FALSE);	// 将复选框置为不可用状态
			AfxBeginThread(SaveFrame_hThread1, (void*)this);		// 线程高速采集当前图像(做参考)
		
		}
		
		
	}
	
}

在NEOAPI SDK里实现线程高速图像保存:

在相机连接后可以通过线程高速图像保存,C++调用代码如下所示:

// 高速保存图像的线程
UINT CGigeDemoDlg::SaveFrame_hThread1(LPVOID pParam)
{
	CGigeDemoDlg *dlg = (CGigeDemoDlg *)pParam;
	dlg->SaveFrame();
	return 0;
}

// 高速保存图像的线程的实现
void CGigeDemoDlg::SaveFrame()
{
	try
	{
		bool m_bRun0 = true;
		while (m_bRun0)
		{
			if (camera.IsConnected())
			{
				// 获取设置保存的图像数量
				int SaveImageSetNum = 0;
				GetDlgItem(IDC_EDTSAENUM)->GetWindowText(m_SaveNums);
				SaveImageSetNum = _ttoi(m_SaveNums);
				int SaveError = 0;
				// 循环采集和保存对应图像
				for (int count = 0; count < SaveImageSetNum; ++count)
				{
					NeoAPI::Image image = camera.GetImage();
					if (!m_strDirectory.IsEmpty())
					{
						// 设置保存的图像的名称:电脑时间戳+图像FrameID
						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 + "-";
						CString  strpath2;
						strpath2.Format(_T("%s%d"), strpath, image.GetImageID());
						// 转换图像名称为NeoAPI::NeoString格式,然后保存对应路径
						USES_CONVERSION;
						std::string strpath2str(W2A(strpath2));
						const char* strpath2str2 = strpath2str.c_str();
						NeoAPI::NeoString strpath3 = strpath2str2;
						image.Save(strpath3);

					}
					else
					{
						AfxMessageBox(_T("可保存路径为空!"));
						SaveError = SaveError + 1;
						break;
					}

				}
				// 将复选框置恢复为可用状态
				GetDlgItem(IDC_MULTISAVEIMAGES)->EnableWindow(TRUE);
				m_bRun0 = false;
				if(SaveError == 0)
					AfxMessageBox(_T("高速保存已完成!"));
				if (SaveImageSetNum == 0)
					AfxMessageBox(_T("设置图像保存数量为0!"));
				
			}
			else
			{
				AfxMessageBox(_T("相机未正常连接!"));
				m_bRun0 = false;
				// 将复选框置恢复为可用状态
				GetDlgItem(IDC_MULTISAVEIMAGES)->EnableWindow(TRUE);
			}


		}

	}
	catch (int e)
	{
		MessageBox(_T("Camera SetShowimage Error"));

	}
}


工业相机高速图像保存测试演示图

测试使用NEOAPI实现工业相机高速图像保存如下所示:
在这里插入图片描述

在这里插入图片描述

Baumer工业相机通过NEOAPI SDK实现相机高速图像保存的优势

使用NEOAPI SDK实现相机高速图像保存具有许多优势,包括但不限于:

  1. 高性能优化:NEOAPI SDK经过针对性的高性能优化,可以实现高速的图像采集和保存操作。这意味着您可以快速地捕获和保存图像数据,从而实现高效的生产流程和实时数据处理需求。

  2. 丰富的功能和工具:NEOAPI SDK提供了丰富的功能和工具,使用户能够充分利用工业相机的高速图像保存能力。这包括灵活的设置和控制选项,可以满足各种应用场景的需求。

  3. 稳定的图像质量:NEOAPI SDK可以确保图像保存的稳定性和质量,无论是在高速采集还是高速保存过程中。这对于需要高精度图像数据的应用而言至关重要。

  4. 兼容性强:NEOAPI SDK与多种操作系统和开发环境兼容,包括Windows、Linux等操作系统,以及C++、C#等开发环境。这意味着您可以在各种平台上灵活地部署和集成相机高速图像保存功能。

  5. 实时图像处理支持:NEOAPI SDK提供了丰富的图像处理和分析功能,可以帮助用户在高速图像保存后进行实时的数据处理和分析,从而满足实时监测和控制的需求。

综上所述,通过NEOAPI SDK实现相机高速图像保存能够获得高性能优化、丰富的功能和工具、稳定的图像质量、兼容性强以及实时图像处理支持等诸多优势,为工业相机的高速图像保存提供了强大的技术支持和解决方案。

Baumer工业相机通过NEOAPI SDK实现相机高速图像保存的行业应用

工业相机通过NEOAPI SDK实现相机高速图像保存在许多行业中都具有广泛的应用,包括但不限于以下领域:

  1. 制造业:在制造业中,工业相机通过NEOAPI SDK实现相机高速图像保存可用于产品质量控制、生产过程监测和缺陷检测。通过高速图像保存,制造商可以快速捕获并分析产品的图像数据,以确保产品的质量和生产效率。

  2. 医疗领域:工业相机通过NEOAPI SDK实现相机高速图像保存可以应用于医学影像设备、医学图像分析等领域。医疗行业对于实时高质量图像数据的需求非常高,通过高速图像保存技术可以实现快速、准确的医学影像数据采集和存储。

  3. 智能交通:在智能交通领域,工业相机通过NEOAPI SDK实现相机高速图像保存可用于交通监控、车辆识别和智能停车等应用。快速保存图像数据有助于实时监测道路交通情况、识别车辆信息以及提升智能交通管理效率。

  4. 农业领域:在农业领域,高速图像保存技术可以应用于农作物生长监测、农产品质量检测等场景,帮助农民快速采集和保存大量的农业图像数据,从而实现智能化的农业生产和管理。

  5. 科学研究:在科学研究领域,工业相机通过NEOAPI SDK实现相机高速图像保存可以应用于实验室实验、天文观测、生物学图像采集等领域。高速保存图像数据有助于科研人员快速记录和分析实验数据,推动科学研究的进展。

综上所述,工业相机通过NEOAPI SDK实现相机高速图像保存在制造业、医疗、智能交通、农业和科学研究等多个行业中都具有重要的应用价值,为这些行业提供了高效、准确的图像数据采集和存储解决方案。

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

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

相关文章

芯片验证入门踩坑指南(1)

因为一些原因&#xff0c;从华为数通C软件开发到海思这边做芯片验证&#xff0c;快一个月&#xff0c;说下一些心得与体会&#xff1a; 如何快速上手&#xff1a; 因为项目非常赶&#xff0c;几乎没有脱产学习时间&#xff0c;就是直接干项目&#xff0c;一开始不需要知道原理…

【leetcode】力扣热门之合并两个有序列表【简单难度】

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 用例 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[] 输入&#xff1a;l1 []…

开源、云原生且实时分析型的现代数据仓库DataBend的介绍,及其与其它开源文件存储的结合使用实例

DataBend介绍 Databend 是一个开源、云原生且实时分析型的现代数据仓库&#xff0c;旨在提供高效的数据存储和处理能力。它采用 Rust 语言开发&#xff0c;并支持 Apache Arrow 格式以实现高性能列式存储与查询处理。 主要特点&#xff1a; 云原生设计&#xff1a;Databend 构…

[VUE]1-创建vue工程

目录 基于脚手架创建前端工程 1、环境要求 2、操作过程 3、工程结构 4、启动前端服务 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c…

即时战略游戏的AI策略思考

想起来第一次玩RTS游戏&#xff0c;就是框住一大群兵进攻&#xff0c;看他们把对面消灭干净……我接触的第一款游戏是《傲世三国》那会儿是小学&#xff0c;后来高中接触了魔兽地图编辑器&#xff0c;我发现自己喜欢直接看属性而省去争论和试验的步骤——我喜欢能一眼看透的感觉…

20240107移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通能上网

20240107移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通能上网 2024/1/7 11:17 开发板&#xff1a;Firefly的AIO-3399J【RK3399】SDK&#xff1a;rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab …

【Spring实战】25 Spring Boot Admin 应用

文章目录 1. 查看健康信息2. 使用 Micrometer 和 "/metrics"3. 管理包和类的日志级别4. 其他功能总结 Spring Boot Admin 是一个功能强大的工具&#xff0c;用于监控和管理多个 Spring Boot 应用程序。通过上一篇文章 【Spring实战】24 使用 Spring Boot Admin 管理…

Android getApplication()、getApplicationContext的区别

在Android中&#xff0c;getApplication()和getApplicationContext()是两种获取应用程序上下文的方法&#xff0c;但它们有一些细微的区别。 getApplication()方法&#xff1a; getApplication()方法通常用于Activity或Fragment中&#xff0c;它返回当前Activity或Fragment所属…

MySQL-存储引擎

简介&#xff1a;存储引擎是存储数据&#xff0c;建立索引&#xff0c;更新/查询数据等技术的实现方式。存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c; (同一个数据库的不同表可以选择不同的存储引擎) 所以存储引擎也可被称为表类型。 我们输入 SHOW CREATE TAB…

Django 10 表单

表单的使用流程 1. 定义 1. terminal 输入 django-admin startapp the_14回车 2. tutorial子文件夹 settings.py INSTALLED_APPS 中括号添加 "the_14", INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib…

Kafka(五)生产者

目录 Kafka生产者1 配置生产者bootstrap.serverskey.serializervalue.serializerclient.id""acksallbuffer.memory33554432(32MB)compression.typenonebatch.size16384(16KB)max.in.flight.requests.per.connection5max.request.size1048576(1MB)receive.buffer.byte…

Fowsniff

靶场搭建 遇到扫描不到的情况&#xff0c;可以尝试改靶机的网络为NAT模式&#xff0c;在靶机启动时按”esc“&#xff0c;进入Advanced options for Ubantu&#xff0c;选择recovery mode&#xff0c;选择network&#xff0c;按方向键”→“&#xff0c;OK&#xff0c;然后res…

Python爬虫获取百度的图片

一. 爬虫的方式&#xff1a; 主要有2种方式: ①ScrapyXpath (API 静态 爬取-直接post get) ②seleniumXpath (点击 动态 爬取-模拟) ScrapyXpath XPath 是 Scrapy 中常用的一种解析器&#xff0c;可以帮助爬虫定位和提取 HTML 或 XML 文档中的数据。 Scrapy 中使用 …

VMware NAT 模式,网关无法ping通 网关解决办法

开启红框服务即可。。 参考&#xff1a;VMware NAT 模式&#xff0c;网关无法ping通 网关解决办法_vmware设置net,本机ping不通网关-CSDN博客

【代码】Keras3.0:实现残差连接

简介 残差连接是一种非常重要的网络结构创新&#xff0c;最早被广泛应用于ResNet&#xff08;Residual Neural Network&#xff09;模型中&#xff0c;由何凯明等人在2015年的论文"Deep Residual Learning for Image Recognition"中提出。 核心思想 通过引入“short…

【Sharding-Sphere 整合SpringBoot】

Sharding-Jdbc在3.0后改名为Sharding-Sphere。Sharding-Sphere相关资料&#xff0c;请自行网上查阅&#xff0c;这里仅仅介绍了实战相关内容&#xff0c;算是抛砖引玉。 Sharding-Sphere 整合SpringBoot 一、项目准备二、项目实战1. pom.xml及application.yml2. OrderInfoCont…

大数据 Yarn - 资源调度框架

Hadoop主要是由三部分组成&#xff0c;除了前面我讲过的分布式文件系统HDFS、分布式计算框架MapReduce&#xff0c;还有一个是分布式集群资源调度框架Yarn。 但是Yarn并不是随Hadoop的推出一开始就有的&#xff0c;Yarn作为分布式集群的资源调度框架&#xff0c;它的出现伴随着…

Mac M1 Parallels CentOS7.9 Deploy Docker + Rancher + K8S(HA+More Master)

一、准备虚拟机资源 虚拟机清单 机器名称IP地址角色rancher10.211.55.200管理K8S集群k8svip10.211.55.199K8S VIPmaster0110.211.55.201K8S集群主节点master0210.211.55.202K8S集群主节点master0310.211.55.203K8S集群主节点node0110.211.55.211K8S集群从节点node0210.211.55…

nvm安装教程,实现node的多版本管理(图文界面)

目录 前言1. 安装配置2. 使用方式 前言 由于前端项目不同的node版本&#xff0c;导致重复的卸载安装会比较麻烦&#xff0c;对此需要nvm来管理 类似python版本的差异&#xff0c;可以使用虚拟环境管理&#xff08;anconda&#xff09;&#xff0c;在我原先的文章也有讲解过 …

Hive精选10道面试题

1.Hive内部表和外部表的区别&#xff1f; 内部表的数据由Hive管理&#xff0c;外部表的数据不由Hive管理。 在Hive中删除内部表后&#xff0c;不仅会删除元数据还会删除存储数据&#xff0c; 在Hive中删除外部表后&#xff0c;只会删除元数据但不会删除存储数据。 内部表一旦…