Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用.NET框架的Encoder方法进行图像压缩保存(C#)

ops/2024/10/19 7:27:40/

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用.NET框架的Encoder方法进行图像压缩保存(C#)

  • Baumer工业相机
  • Baumer工业相机通过NEOSDK进行图像压缩的技术背景
  • 代码分析
    • 第一步:先引用对应的NET框架的DLL文件
    • 第二步:在回调函数里进行Buffer图像转换为Image图像进行压缩
    • 第三步:NET框架的Encoder图像压缩算法
  • 工业相机图像通过NEOAPI SDK使用.NET框架的Encoder方法进行图像压缩的优点
  • 工业相机图像通过NEOAPI SDK使用使用.NET框架的Encoder方法图像压缩的行业应用

Baumer工业相机

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

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

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

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

Baumer工业相机堡盟相机在SDK中的原始图像可以和微软提供的图像压缩算法进行联合,从而实现外部图像进行压缩的功能设置。

Baumer工业相机通过NEOSDK进行图像压缩的技术背景

Baumer工业相机的NEOAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。

NEOAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。

微软的图像压缩算法是基于JPEG XR标准的。这个标准是由微软与其他公司合作开发的,后来在2009年被采纳为一个国际标准(ISO/IEC 29199-2)。

JPEG XR 旨在提供比标准 JPEG 算法更好的压缩,同时保持高图像质量。它通过使用更复杂的压缩方法来实现这一点,该方法可以处理更广泛的颜色范围,并提供对透明度和无损压缩的更好支持。

微软对JPEG XR标准的实施包括一些额外的功能和优化,以进一步提高其性能。这些包括对渐进式解码的支持,子带编码,以及对色度适应和色彩空间转换的改进处理。

总的来说,微软的图像压缩算法是一个非常有效和广泛使用的解决方案,用于压缩图像,同时保持高质量和保真度。

这里主要描述如何在C#的平台下实现通过BGAPI SDK实现微软图像质量压缩的核心代码

代码分析

本文介绍使用NEOAPI SDK对Baumer的工业相机进行开发时,使用通过NEOAPI SDK和微软的图像压缩算法进行图像转换的功能,注意Image算法的使用需要将Buffer图像先转为Bitmap数据,再进行压缩算法的使用。

第一步:先引用对应的NET框架的DLL文件

C#环境下引用System.Drawing.dll作为图像处理库代码如下所示:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using NEOAPI;

第二步:在回调函数里进行Buffer图像转换为Image图像进行压缩

下面为图像转换为Image图像的核心代码,如下所示:

//回调函数中直接将buffer转为Bitmap
#region//Convert BGAPI2.Buffer to Bitmap(it will reduce the additional cost time of callback function)
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height, (int)mBufferFilled.Width, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));
System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;
int nColors = 256;
for (int ix = 0; ix < nColors; ix++)
{uint Alpha = 0xFF;uint Intensity = (uint)(ix * 0xFF / (nColors - 1));palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity, (int)Intensity, (int)Intensity);
}
bitmap.Palette = palette;string filenameBMP = mBufferFilled.Parent.Parent.Model + "_ImageMono8_" + mBufferFilled.FrameID + "_time_" + mBufferFilled.Timestamp + ".bmp";
string filenameBMP2 = strPath;//将Bitmap图像转为Image
#region//Copy the Bitmap to a new Bitmap instance and add it to the list of bitmaps(memory) 
Bitmap clone = (Bitmap)bitmap.Clone();
BitmapData data = clone.LockBits(new Rectangle(0, 0, clone.Width, clone.Height), ImageLockMode.ReadOnly, clone.PixelFormat);
clone.UnlockBits(data);
Image image = clone; // 隐式类型转换
SaveImageForSpecifiedQuality(image , savePath, 75);//设置75%质量的压缩
#endregion

第三步:NET框架的Encoder图像压缩算法

下面为使用NET框架的Encoder图像压缩算法的核心代码,如下所示:

/// <summary>
/// 按指定的压缩质量及格式保存图片(微软的Image.Save方法保存到图片压缩质量为75)
/// </summary>
/// <param name="sourceImage">要保存的图片的Image对象</param>
/// <param name="savePath">图片要保存的绝对路径</param>
/// <param name="imageQualityValue">图片要保存的压缩质量,该参数的值为1至100的整数,数值越大,保存质量越好</param>
/// <returns>保存成功,返回true;反之,返回false</returns>
public bool SaveImageForSpecifiedQuality(System.Drawing.Image sourceImage, string savePath, int imageQualityValue)
{//以下代码为保存图片时,设置压缩质量EncoderParameters encoderParameters = new EncoderParameters();EncoderParameter encoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, imageQualityValue);encoderParameters.Param[0] = encoderParameter;try{ImageCodecInfo[] ImageCodecInfoArray = ImageCodecInfo.GetImageEncoders();ImageCodecInfo jpegImageCodecInfo = null;for (int i = 0; i < ImageCodecInfoArray.Length; i++){if (ImageCodecInfoArray[i].FormatDescription.Equals("JPEG")){jpegImageCodecInfo = ImageCodecInfoArray[i];break;}}sourceImage.Save(savePath, jpegImageCodecInfo, encoderParameters);return true;}catch{return false;}
}

工业相机图像通过NEOAPI SDK使用.NET框架的Encoder方法进行图像压缩的优点

  1. 高质量和可控的图像压缩
    通过使用 System.Drawing.Imaging.Encoder,开发者可以详细指定压缩的质量。例如,对于JPEG格式的图像,可以通过调整质量参数来平衡图像质量与文件大小。这是通过设置 Encoder.Quality 参数来实现的,该参数允许指定从0到100的质量级别(100是最高质量但文件大小也最大)。

  2. 支持多种文件格式
    System.Drawing.Imaging.Encoder 支持多种图像格式的编码和压缩,包括但不限于JPEG, GIF, TIFF, 和 PNG。这意味着开发者可以根据需要选择最合适的格式,以满足不同的图像质量要求和文件大小限制。

  3. 细粒度控制图像保存参数
    Encoder 类与 EncoderParameters 一起工作,后者提供了一种方式来传递多个编码参数。这包括但不限于压缩质量。例如,对于TIFF文件,可以控制图像是否以单页或多页格式保存,这在处理文档扫描时特别有用。

  4. 改善性能
    通过适当的压缩设置,可以显著减少图像文件的大小,这将节省存储空间并可能改善应用程序的性能,特别是在加载和传输大量图像时。

  5. 可透过元数据设置对图像的额外控制
    System.Drawing.Imaging.Encoder 不仅能控制图像的压缩,还可以处理图像的元数据。例如,可添加或修改EXIF信息,这对于摄影和图像档案管理非常重要。

  6. 与.NET集成
    由于 System.Drawing.Imaging.Encoder 是.NET框架的一部分,因此与C#或其他.NET语言紧密集成,无需额外学习或使用第三方库,简化了开发过程。

工业相机图像通过NEOAPI SDK使用使用.NET框架的Encoder方法图像压缩的行业应用

在工业领域,工业相机广泛应用于自动化检测、质量控制、机器视觉等环节。工业相机捕获的图像常常需要进行高效的压缩与保存,以便于存储或进一步分析处理。使用 .NETSystem.Drawing.Imaging.Encoder 类可以在这些应用中发挥重要作用,具体包括以下几个方面的行业应用:

  1. 自动化质量控制

在制造业中,通过工业相机捕捉产品在生产线上的图像,用于检测和分析产品是否存在缺陷。图像数据量通常很大,使用 System.Drawing.Imaging.Encoder 可以有效地压缩图像文件,降低存储空间需求,同时便于在网络中传输这些图像到质量检测系统进行进一步分析。

  1. 机器视觉系统

机器视觉系统广泛用于汽车组装、电子装配和包装等行业。这些系统依靠工业相机捕获的高分辨率图像来指导机器人进行精确作业。通过 System.Drawing.Imaging.Encoder 压缩图像,可以在保持图像质量的同时减小文件尺寸,从而提高系统的响应速度和处理效率。
3. 无人车和自动导航系统

在物流和运输领域,无人车和自动导航系统需要实时处理大量来自工业相机的视觉数据。通过使用 System.Drawing.Imaging.Encoder 进行高效的图像压缩,可以加快图像的处理和分析速度,降低系统的延迟,提高导航的准确性和安全性。

  1. 远程监控

在石油、化工、电力等行业,工业相机常用于难以接近或危险区域的远程监控。通过 System.Drawing.Imaging.Encoder 对图像进行压缩,可以通过网络实时传输大量监控图像到控制中心,不仅节省了传输带宽,还能提高监控效率。

  1. 文档和图像存档

对于需要长期保存的工业设计图、技术图纸等图像文件,利用 System.Drawing.Imaging.Encoder 进行压缩,既能保证图像的可读性,又能显著减少存储空间的占用,便于数据的长期管理和快速检索。

总结

在工业应用中,System.Drawing.Imaging.Encoder 提供的压缩功能使得图像在保持必要质量的前提下,能够以更小的文件大小进行存储和传输,这对提升工业自动化和远程监控系统的效率和效果具有重要意义。这种技术的实施不仅优化了数据处理流程,也为行业用户带来了可观的成本节约和操作便利。


http://www.ppmy.cn/ops/4126.html

相关文章

代码随想录算法训练营第四十七天|leetcode115、392题

一、leetcode第392题 本题要求判断s是否为t的子序列&#xff0c;因此设置dp数组&#xff0c;dp[i][j]的含义是下标为i-1的子串与下标为j-1的子串相同字符的个数&#xff0c;可得递推公式是通过s[i-1]和t[j-1]是否相等区分。 具体代码如下&#xff1a; class Solution { publ…

区块链与数字身份:Web3的身份验证革命

随着数字化时代的发展&#xff0c;个人身份认证在日常生活和商业活动中变得越来越重要。然而&#xff0c;传统的身份认证方式存在着许多问题&#xff0c;如安全性不足、数据泄露、信息篡改等。而区块链技术的出现为数字身份认证带来了全新的解决方案。本文将深入探讨区块链与数…

【SQL】DISTINCT GROUP BY

找到所有办公室里的所有角色&#xff08;包含没有雇员的&#xff09;,并做唯一输出(DISTINCT) 用DISTINCT : SELECT DISTINCT B.Building_name,E.Role FROM Buildings B LEFT JOIN Employees EON B.Building_name E.Building需要找到的结果&#xff1a;所有办公室名字&#…

【网站项目】学习资料销售平台 小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

解决端口是0问题,解决mysql无法看到3306端口监听

mysql> show global variables like port; 是0 打开目录 /etc/mysql/mysql.conf.d 修改这段话为 [mysqld] # # * Basic Settings # user mysqlpid-file /var/run/mysqld/mysqld.pidsocket /var/run/mysqld/mysqld.sockport 3306datadir …

18 统计网站每日的访问次数

1.将竞赛的数据上传HDFS,查看数据的格式 通过浏览器访问hdfs,查看该文档前面的部分数据 每条数据的字段值之间使用逗号隔开的 &#xff0c;最终时间是第五个自动&#xff0c;获取第五个字段值的中的年月日。 2.通过Idea创建项目mr-raceData ,基础的配置 修改pom.xml,添加依赖 …

有线通信--一文弄懂SPI--(基础篇)

学完很久的通信协议具体内容总是忘记&#xff0c;为了方便自己随时复习以及查看&#xff0c;本人这里总结一份关于SPI的协议详解&#xff0c;分享给大家。 一、什么是SPI 每接触一个协议,我们都要明白它的优缺点&#xff0c;知道它的使用范围和特点&#xff0c;在有这些前置认…

upload-labs第十七十八关

第十七关 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_name,".")1);$upload_file …