Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)
- Baumer工业相机
- Baumer工业相机BGAPISDK和图像放大缩小的技术背景
- Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能
- 1.引用合适的类文件
- 2.通过BGAPISDK将相机图像图像放大缩小功能
- Baumer工业相机将相机图像放大缩小显示的优势
- Baumer工业相机将相机图像放大缩小显示的行业应用
Baumer工业相机
Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。
Baumer工业相机BGAPISDK和图像放大缩小的技术背景
Baumer工业相机的BGAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。
BGAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。
可以通过使用工业相机的软件开发工具包(SDK)来放大和缩小图像以及显示它们。这通常涉及使用SDK中的函数或方法来访问相机的图像帧,并将其传递给一个显示器控件或绘图区域。
本文介绍的使用BGAPI SDK将相机图像相机图像图像放大缩小的功能。
Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能
下面介绍在C#里Baumer工业相机如何通过BGAPISDK将相机图像图像放大缩小的方式
1.引用合适的类文件
代码如下(示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Data;
using System.Globalization;
using System.Diagnostics;
using System.IO;
2.通过BGAPISDK将相机图像图像放大缩小功能
Baumer工业相机将相机图像图像放大缩小功能核心代码如下所示:
SystemList
Open a System
Get the InterfaceList and fill it Open an Interface
private void mPictureBox_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{Bitmap bmptodraw = null;//Bitmap cdbmptodraw = null;//Bitmap chbmptodraw = null;Rectangle bitmap_complete = new Rectangle(); //rectangle over all bitmapsRectangle src_complete = new Rectangle();Rectangle dest_complete = new Rectangle();double ratioW = 1.0f;double ratioH = 1.0f;Rectangle bitmap_image = new Rectangle();//Rectangle bitmap_dist = new Rectangle();//Rectangle bitmap_header = new Rectangle();Point pictureboxlocation = new Point();Rectangle src_image = new Rectangle();//Rectangle src_header = new Rectangle();//Rectangle src_dist = new Rectangle();Rectangle dest_image = new Rectangle();//Rectangle dest_header = new Rectangle();//Rectangle dest_dist = new Rectangle();//int ret = 0;//SizeF header_size = new SizeF();int idx = -1;Size destbmp = new Size(1, 1);if (mbNewImageReady == true){mbDrawFirstBitmap = !mbDrawFirstBitmap;mbFlipDrawImage = true;}mbNewImageReady = false;if (mbDrawFirstBitmap){idx = 0;if (mImageData[0].bgapiImage == null)return;bmptodraw = mImageData[0].bmp;}else{idx = 1;if (mImageData[1].bgapiImage == null)return;bmptodraw = mImageData[1].bmp;}if (!mShowImage)return;if (mShowImage){//destbmp.Width += bmptodraw.Width;//destbmp.Height += bmptodraw.Height;bitmap_complete.Width += bmptodraw.Width;bitmap_complete.Height = Math.Max(bitmap_complete.Height, bmptodraw.Height);}//calculate the destination rectangle of the several data blocksint nwx = 0;if (mShowImage){bitmap_image.X = nwx;bitmap_image.Y = 0;bitmap_image.Width = bmptodraw.Width;bitmap_image.Height = bmptodraw.Height;nwx += bmptodraw.Width;}else{if (!bitmap_image.IsEmpty)bitmap_image.X = bitmap_image.Y = bitmap_image.Width = bitmap_image.Height = 0;}//adjust pictureBox size if (mSizeMode == PictureBoxSizeMode.Normal){this.pictureBox1.Width = bitmap_complete.Width;this.pictureBox1.Height = bitmap_complete.Height;this.panel1.AutoScroll = true;}else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){ratioW = (double)bitmap_complete.Width / (double)panel1.Width;ratioH = (double)bitmap_complete.Height / (double)panel1.Height;if (ratioW > ratioH){this.pictureBox1.Height = (int)((double)bitmap_complete.Height / ratioW);this.pictureBox1.Width = panel1.Width;}else{this.pictureBox1.Width = (int)((double)bitmap_complete.Width / ratioH);this.pictureBox1.Height = panel1.Height;}this.panel1.AutoScroll = false;}else{//--1this.pictureBox1.Width = Convert.ToInt32(bitmap_complete.Width * ZOOMFACTOR);this.pictureBox1.Height = Convert.ToInt32(bitmap_complete.Height * ZOOMFACTOR);this.panel1.AutoScroll = true;}}else{if (bitmap_complete.Width > panel1.Width)this.pictureBox1.Width = panel1.Width;elsethis.pictureBox1.Width = bitmap_complete.Width;if (bitmap_complete.Height > panel1.Height)this.pictureBox1.Height = panel1.Height;elsethis.pictureBox1.Height = bitmap_complete.Height;this.panel1.AutoScroll = false;}//adjust picture box locationif (mSizeMode == PictureBoxSizeMode.Normal)pictureboxlocation = new Point(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){if (ratioW > ratioH){pictureboxlocation.X = 0;pictureboxlocation.Y = (int)(panel1.Height / 2) - (int)(this.pictureBox1.Height / 2);}else{pictureboxlocation.X = (int)(panel1.Width / 2) - (int)(this.pictureBox1.Width / 2);pictureboxlocation.Y = 0;}}else//--1pictureboxlocation = new Point(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);}else //center image{if (bitmap_complete.Width > panel1.Width)pictureboxlocation.X = 0;elsepictureboxlocation.X = (int)(panel1.Width / 2) - (int)(bitmap_complete.Width / 2);if (bitmap_complete.Height > panel1.Height)pictureboxlocation.Y = 0;elsepictureboxlocation.Y = (int)(panel1.Height / 2) - (int)(bitmap_complete.Height / 2);}//calculate source rectanglesif (mSizeMode == PictureBoxSizeMode.Normal){src_complete.X = 0;src_complete.Y = 0;src_complete.Width = bitmap_complete.Width;src_complete.Height = bitmap_complete.Height;src_image = new Rectangle(0, 0, bitmap_image.Width, bitmap_image.Height);}else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){src_complete.X = 0;src_complete.Y = 0;src_complete.Width = bitmap_complete.Width;src_complete.Height = bitmap_complete.Height;src_image = new Rectangle(0, 0, bitmap_image.Width, bitmap_image.Height);}else{src_complete.X = 0;src_complete.Y = 0;src_complete.Width = bitmap_complete.Width;src_complete.Height = bitmap_complete.Height;src_image = new Rectangle(0, 0, bitmap_image.Width, bitmap_image.Height);}}else{if (bitmap_complete.Width > panel1.Width)src_complete.X = (int)(bitmap_complete.Width / 2) - (int)(panel1.Width / 2);elsesrc_complete.X = 0;src_complete.Width = this.panel1.Width;if (bitmap_complete.Height > panel1.Height)src_complete.Y = (int)(bitmap_complete.Height / 2) - (int)(panel1.Height / 2);elsesrc_complete.Y = 0;src_complete.Height = this.pictureBox1.Height;src_image = src_complete;src_image.Intersect(bitmap_image);src_image.X -= bitmap_image.X;src_image.Y -= bitmap_image.Y;}//calculate destination rectanglesif (mSizeMode == PictureBoxSizeMode.Normal){dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = bitmap_complete.Width;dest_complete.Height = bitmap_complete.Height;dest_image = bitmap_image;}else if (mSizeMode == PictureBoxSizeMode.StretchImage){if (mbFitToWindow){dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = this.pictureBox1.Width;dest_complete.Height = this.pictureBox1.Height;dest_image.X = this.pictureBox1.Width * bitmap_image.Left / src_complete.Width;dest_image.Y = this.pictureBox1.Height * bitmap_image.Top / src_complete.Height;dest_image.Width = this.pictureBox1.Width * bitmap_image.Width / src_complete.Width;dest_image.Height = this.pictureBox1.Height * bitmap_image.Height / src_complete.Height;}else{dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = this.pictureBox1.Width;dest_complete.Height = this.pictureBox1.Height;dest_image.X = (int)(bitmap_image.X * ZOOMFACTOR);dest_image.Y = (int)(bitmap_image.Y * ZOOMFACTOR);dest_image.Width = (int)(bitmap_image.Width * ZOOMFACTOR);dest_image.Height = (int)(bitmap_image.Height * ZOOMFACTOR);}}else{dest_complete.X = 0;dest_complete.Y = 0;dest_complete.Width = this.pictureBox1.Width;dest_complete.Height = this.pictureBox1.Height;dest_image = src_complete;dest_image.Intersect(bitmap_image);dest_image.Offset(src_complete.X * (-1), src_complete.Y * (-1));}this.pictureBox1.Location = pictureboxlocation;try{if (mShowImage){e.Graphics.DrawImage(bmptodraw,dest_image,src_image.Left,src_image.Top,src_image.Width,src_image.Height,GraphicsUnit.Pixel);}}catch{System.Windows.Forms.MessageBox.Show("Exception while refresh image window");}
}
private void DrawingTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{lock (mImageData){if (mbNewImageAvailable)//1{if (mbNewImageReady == false)//2{if (mbDrawFirstBitmap == true)//3{if (mImageData[1].bgapiImage != null)//4{lock (mCamera.BackImagesColl)mCamera.BackImagesColl.Add(mImageData[1].bgapiImage);}mImageData[1].bgapiImage = mNewBgapiImage;CreateBitmap(ref mImageData[1].bgapiImage, ref mImageData[1].bmp, BGAPI.BGAPI_ChunkId.BGAPI_CHUNKID_IMAGE);}else//3 --mbDrawFirstBitmap == false{if (mImageData[0].bgapiImage != null)//--4{//transformation presetlock (mCamera.BackImagesColl)mCamera.BackImagesColl.Add(mImageData[0].bgapiImage);}mImageData[0].bgapiImage = mNewBgapiImage;CreateBitmap(ref mImageData[0].bgapiImage, ref mImageData[0].bmp, BGAPI.BGAPI_ChunkId.BGAPI_CHUNKID_IMAGE);}mbNewImageAvailable = false;mbNewImageReady = true;pictureBox1.Invalidate(pictureBox1.ClientRectangle, false);}}}
}
Baumer工业相机将相机图像放大缩小显示的优势
提高图像细节:通过放大的图像,您可以看到更多的细节,帮助您更好地分析和理解图像。
方便捕获处理:放大图像可以使需要测量或分析的目标更易于捕获并进行后续处理,提高了工作效率。
减少错误率:当需要进行目标定位或测量时,放大图像可以帮助您减少错误率,提高测量的精度。
对于设备来说更加灵活:随着工艺和设备的不断改进,相机调整成为会更加灵活,可以根据需要调整图像大小和显示比例。
更好的用户体验:放大缩小图像可以提供更好的用户体验,使用户更容易观察图像细节,并且更容易理解和分析图像。
Baumer工业相机将相机图像放大缩小显示的行业应用
制造业:在制造业中,工业相机通常用于检查和测量零件的尺寸、形状和表面质量。工业相机的放大缩小功能可以帮助操作员更好地观察图像,提高生产效率。
医疗行业:在医疗行业中,工业相机可以用于拍摄骨骼、血管或其他器官的图像。放大缩小功能可以使医生更好地观察和分析这些图像,并帮助他们作出更好的诊断。
. 食品行:在食品行业中,工业相机可以用于检查食品的质量和安全性。放大缩小功能可以使操作员更好地观察食品的细节并检查有无缺陷。
运输和安保:在运输和安保中,工业相机可以用于识别车辆和个人。放大缩小功能可以帮助识别和跟踪目标更加准确和快速。
环境监测:工业相机可以用于环境监测如气象、污染物。放大缩小功能可以帮助检测和分析图片中存在的环境问题,如污染物分布区域。
相关文章:
Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#) Baumer工业相机Baumer工业相机BGAPISDK和图像放大缩小的技术背景Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能1.引用合适的类文件2.通过BGAPISDK将相机图像图像放大缩小功能…...
8.1 PowerBI系列之DAX函数专题-进阶-解决列排序对计算的影响
需求 下列矩阵中,在月份列不按照原始数据的month_no排列时,能正确计算销售额占比,但是当月份按照month_no排序时就会出错,需要解决这个问题。 实现 month % divide([amount],calculate([amount],all(date[month desc]))) //排…...
Java的第十二篇文章——集合
目录 第十二章 集合 学习目标 1. 集合框架的由来 2. 集合框架的继承体系 3. Collection接口 3.1 Collection接口的常用方法 4. Iterator接口 4.1 Iterator接口的抽象方法 4.2 获取迭代器接口实现类 4.3 迭代器的实现原理 4.4 并发修改异常 4.5 集合存储自定义对象并…...
docker 镜像制作 与 CI/CD
目录 镜像到底是什么? 使用docker创建镜像 步骤: 1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件) 2、编辑requirements.txt文件 3、编辑app.py文件,我们的程序文件 4、生成镜像文件 5、查看生成的镜…...
Spring Boot 异常报告器解析
基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析Spring Boot 异常报告器解析 创建自定…...
瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作
(图片来源:网络) 瑞亚太空活动公司(RSA)与英国国防与安全加速器(DASA)签署了合作协议,主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…...
Shapley值法介绍及实例计算
Shapley值法介绍及实例计算 为解决多个局中人在合作过程中因利益分配而产生矛盾的问题,属于合作博弈领域。应用 Shapley 值的一大优势是按照成员对联盟的边际贡献率将利益进行分配,即成员 i 所分得的利益等于该成员为他所参与联盟创造的边际利益的平均值…...
不用手动改 package.json 的版本号
“为什么package.json 里的版本还是原来的,有没有更新?”,这个时候我意识到,我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号,只要在发布打tag的时候同步一下即可 node.js 部分,我们得有一个…...
gitlab Can‘t update,dev has no tracked branch
代码仓库迁移到gitlab后本地更改仓库地址后 拉取代码报错: Can’t update,dev has no tracked branch: 解决办法: 在当前项目的目录下运行命令: git branch -u git dev --set-upstream-toorigin/dev第一个dev是本地分支名字&…...
sql批量操作
SQl: 1,在某一字段后批量增加内容:UPDATE 表名 SET 字段 CONCAT(字段,要增加的内容) 例:UPDATE b8_niuniu_permission SET game_ids CONCAT(game_ids,,3) (或者后面可以加where条件) 2,批量修改某一字段…...
数据库监控与调优【九】—— 索引数据结构
索引数据结构-B-Tree索引、Hash索引、空间索引、全文索引 二叉树查找 对于相同深度的节点,左侧的节点总是比右侧的节点小。在搜索时,如果要搜索的值key大于根节点(图中6),就会在右侧子树里查找;key小于根…...
哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议
哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理哈工大计算机网络课程传输层协议详解之:TCP协议哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 …...
Unity Mac最新打苹果包流程
作者介绍:铸梦xy。IT公司技术合伙人,IT高级讲师,资深Unity架构师,铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件(又名描…...
【MySQL数据库 | 第二十篇】explain执行计划
目录 前言: explain: 语法: 总结: 前言: 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具:SQL执行频率,慢日志查询,profile。但是这三个方法也只是在时间角度粗略的…...
学Python能做哪些副业?我一般不告诉别人!建议存好
前两天一个朋友找到我吐槽,说工资一发交完房租水电,啥也不剩,搞不懂朋友圈里那些天天吃喝玩乐的同龄人钱都是哪来的?确实如此,刚毕业的大学生工资起薪都很低,在高消费、高租金的城市,别说存钱&a…...
简化 Hello World:Java 新写法要来了
OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” ,希望 Java 的学习过程能更平滑,让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释:现在的 Java 语言非常…...
【服务器】springboot实现HTTP服务监听
文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...
浅谈常见的加密算法及实现
浅谈常见的加密算法及实现 简介: 随着公司业务的发展,系统用户量日益增多,系统安全性问题一直在脑子里反复回旋,以前系统用户少影响面小,安全方面也一直没有进行思考和加固,现如今业务发展了,虽…...
FTP协议详解
简介 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协…...
网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言
目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA 特性 4、PHP 作用 PHP 能做什么? 5、C/C 使用 如何学习 前面的话 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML,JS那些基础知识,磨刀不误砍柴…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
