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那些基础知识,磨刀不误砍柴…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...