Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的对数Log变换算法增强(C#)

news2025/1/13 10:32:28

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的对数Log变换算法增强(C#)

  • Baumer工业相机
  • Baumer工业相机使用图像算法增加图像的技术背景
  • Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法
    • 1.引用合适的类文件
    • 2.BGAPI SDK在图像回调中引用OpenCV的对数Log变换增强算法
    • 3.OpenCV进行对数Log变换算法进行图像增强
  • Baumer工业相机使用图像算法增强图像的优势
  • Baumer工业相机使用图像算法增强图像的行业应用

Baumer工业相机

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

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

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

Baumer工业相机使用图像算法增加图像的技术背景

工业相机通常使用各种图像算法来提高其捕获的图像的质量。这些算法旨在提高图像的清晰度、对比度、色彩准确性和整体图像质量。

最常用的算法之一是降噪算法。该算法用于消除图像中可能出现的任何随机噪声或颗粒。另一个流行的算法是图像稳定算法。该算法用于减少由相机抖动引起的模糊现象。

另一个用于工业相机的流行图像算法是边缘增强算法。该算法用于提高图像中边缘的清晰度。它通过检测图像中的边缘,然后增加这些边缘的对比度来工作。

直方图均衡化是另一种用于工业相机的图像算法。该算法通过重新分配像素值以覆盖图像中的整个可用值范围来改善图像的对比度。

总的来说,这些图像算法帮助工业相机捕获清晰和高质量的图像。它们在现代成像系统中起着至关重要的作用,在机器人、显微镜和医学成像等领域至关重要。

本文这里只简单使用Baumer工业相机进行伽马增强的图像算法。

Baumer工业相机通过BGAPI SDK联合OpenCV使用图像增强算法

下面介绍在C#里Baumer工业相机在回调函数里直接进行对数Log变换图像增强的演示

对数Log变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显。

1.引用合适的类文件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BGAPI2;
using System.Runtime.InteropServices;
using System.IO;
using CSCameraDemo.Properties;
using System.Globalization;
using WindowsFormsApplication1;
using System.Threading.Tasks;
using System.Threading;
using System.Drawing.Imaging;

using OpenCvSharp;
using OpenCvSharp.Dnn;

2.BGAPI SDK在图像回调中引用OpenCV的对数Log变换增强算法

代码如下(示例),C#调用代码如下所示:

void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{
    try
    {
        BGAPI2.Buffer mBufferFilled = null;              
        mBufferFilled = mDSEvent.BufferObj;
        if (mBufferFilled == null)
        {
            MessageBox.Show("Error: Buffer Timeout after 1000 ms!");
        }
        else if (mBufferFilled.IsIncomplete == true)
        {
            //MessageBox.Show("Error: Image is incomplete!");
            //queue buffer again
            mBufferFilled.QueueBuffer();
        }
        else
        {
            #region//获取当前FrameID
            FrameIDInt = (int)mBufferFilled.FrameID;
            OnNotifySetFrameID(FrameIDInt.ToString());
            #endregion

            //将相机内部图像内存数据转为bitmap数据
            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));
                                      
            #region//Mono图像数据转换。彩色图像数据转换于此不同
            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;
            #endregion


            #region//回调函数保存图像功能
            if (bSaveImg)
            {
                //使用bitmap自带函数保存
                string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                string saveimagepath = pImgFileDir  +"\\"+ strtime + ".jpg";
                bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);

                //使用opencv进行保存图像
                if (mBufferFilled.PixelFormat == "Mono8")
                {
                    OpenCvSharp.Mat matgray = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat                           
                    matgray.SaveImage("opencv_image.png");
                    Cv2.ImWrite("opencvcv_image_Clone.png", matgray);
                }                      
                bSaveImg = false;//变量控制单次保存图像
            }
            #endregion

            #region//对灰度图像进行对数Log变换算法增强
            OpenCvSharp.Mat Matgray = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat                 

			//方法一 		
			Mat logImage = new Mat();
			Mat Qualized= new Mat();
			// Perform log transformation
			Cv2.Log(Matgray, logImage);
			// Normalize the transformed image
			Cv2.Normalize(logImage, logImage, 0, 255, NormTypes.MinMax);
			// Convert back to 8-bit image
			logImage.ConvertTo(Qualized, MatType.CV_8U);
            
            Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(Qualized);//用mat转换为bitmap

            #endregion

            #region//bitmap的图像数据复制pBitmap
            Bitmap clonebitmap = (Bitmap)bmp.Clone();
            BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, clonebitmap.Width, clonebitmap.Height), ImageLockMode.ReadOnly, clonebitmap.PixelFormat);
            clonebitmap.UnlockBits(data);
            pBitmap = clonebitmap;
            #endregion
            #region//将pBitmap图像数据显示在UI界面PictureBox控件上
            prcSource.X = 0;prcSource.Y = 0;
            prcSource.Width = (int)mBufferFilled.Width;prcSource.Height = (int)mBufferFilled.Height;
            System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);
            graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);
            #endregion

            clonebitmap.Dispose(); //清除临时变量clonebitmap所占内存空间
            mBufferFilled.QueueBuffer();

        }
    }
    catch (BGAPI2.Exceptions.IException ex)
    {
        {
            string str2;
            str2 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str2);
        }
    }
    return;
}

3.OpenCV进行对数Log变换算法进行图像增强

Cv2.Log方法对灰度图像进行对数转换。
为了确保像素值在0-255的范围内、 使用Cv2.Normalize方法将转换后的图像归一化。
最后,使用ConvertTo方法将归一化的图像转换为8位图像,
并使用Cv2.Normalize方法显示结果。

C#调用代码如下所示:

 #region//对灰度图像进行对数Log变换算法增强
OpenCvSharp.Mat Matgray = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat                            
Mat logImage = new Mat();
Mat Qualized= new Mat();

// Perform log transformation
Cv2.Log(Matgray, logImage);

// Normalize the transformed image
Cv2.Normalize(logImage, logImage, 0, 255, NormTypes.MinMax);

// Convert back to 8-bit image
logImage.ConvertTo(Qualized, MatType.CV_8U);

// Show the result
Cv2.ImShow("Log Transformed Image", logImage);
Cv2.WaitKey(0);
Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(Qualized);//用mat转换为bitmap

#endregion

呈现效果如下所示:
(未使用对数Log变换增强图像算法)
在这里插入图片描述

(使用对数Log变换增强图像算法)
在这里插入图片描述

Baumer工业相机使用图像算法增强图像的优势

  1. 提高图像质量: 随着图像算法的使用,工业相机可以产生高度详细和清晰的图像。这些算法可以减少噪音,突出边缘,并增加对比度,以产生更好的图像质量。

  2. 增加准确性:图像算法也可以提供高度准确的测量和数据。通过使用边缘检测和模式识别等图像分析技术,工业相机可以更精确地识别和测量物体。

  3. 成本效益: 通过提高图像质量和准确性,工业相机可以减少对人工检查的需求,从而降低与质量控制和产品拒绝相关的成本。

  4. 效率提高: 通过使图像分析过程自动化,工业相机可以提高产量,减少周期时间,使生产线更有效率。

  5. 更好的决策: 随着图像质量和准确性的提高,工业相机可以为决策者提供高度详细和可靠的数据,使他们能够对生产过程和质量控制做出更明智的决定。

Baumer工业相机使用图像算法增强图像的行业应用

带有图像算法的工业相机被广泛应用于各个行业,用于增强图像,以提高产品质量、安全和效率。以下是其应用的一些例子:

  1. 制造业: 具有图像算法的工业相机用于检查装配线的缺陷,检查产品的质量,并确保遵守安全标准。它们还可用于在制造过程中检查零件,这有助于及早发现缺陷,防止昂贵的生产延误。

  2. 汽车行业: 在汽车行业,具有图像算法的工业相机被广泛用于安全检查,检测汽车零部件的缺陷,并确保司机和乘客的安全。它们还可用于事故发生后的损害评估。

  3. 航空航天: 工业相机在航空航天工业中用于检查卫星、火箭和其他航天器在组装期间和组装后的部件。图像算法可以帮助检测关键部件的缺陷和故障,以确保宇航员的安全和太空任务的成功。

  4. 医疗:具有图像算法的工业相机被用于检测和诊断疾病和医疗状况的医疗应用。它们还被用于医学研究、分析和监测病人的健康。

  5. 农业: 工业相机可用于监测作物的生长,检查农产品的质量,并检测作物的病虫害。图像算法可以帮助早期发现问题,使农民能够采取纠正措施来保护他们的作物。

在所有这些行业中,使用带有图像算法的工业相机大大改善了图像分析的效率和准确性,从而提高了产品质量,增加了安全性,并降低了成本。

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

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

相关文章

ASEMI代理ADI亚德诺ADA4940-1ACPZ-R7车规级芯片

编辑-Z ADA4940-1ACPZ-R7芯片参数&#xff1a; 型号&#xff1a;ADA4940-1ACPZ-R7 −3 dB小信号带宽&#xff1a;260 MHz −3 dB大信号带宽&#xff1a;25 MHz 0.1dB平坦度的带宽&#xff1a;14.5 MHz 斜率&#xff1a;95 V/s 超速恢复时间&#xff1a;86 ns 输入电压噪…

【数据结构】堆的应用(堆排序的实现 + (向上/向下)建堆时间复杂度证明 + TopK问题(笔记总结))

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&…

Redis高可用之3种集群方案对比

Redis集群方案使用建议&#xff1a; Redis cluster&#xff1a;除非是1000个节点以上的超大规模集群&#xff0c;优先考虑使用Redis clustercodis&#xff1a;旧项目如果仍在使用codis&#xff0c;可继续使用&#xff0c;但也推荐迁移到Redis clustertwemproxy&#xff1a;不建…

什么是数字化?企业为什么要数字化转型?

什么是数字化&#xff1f;企业为什么要数字化转型&#xff1f; 深度长文&#xff0c;4000字&#xff0c;融合了很多国内外专业期刊观点&#xff0c;一文讲清到底什么是企业数字化转型&#xff1f;心急的小伙伴可以先看目录&#xff1a; 关于定义——到底什么是“数字化转型”…

Ubuntu18.04通过一根网线与树莓派建立连接,远程操作树莓派,向树莓派传文件

文章目录 前言1 树莓派设置静态IP1.1 不能登录到树莓派的图形化界面1.2 可以登录到树莓派的图形化界面 2 PC端的ubuntu18.04设置静态ip地址2.1 不使用图形化界面操作2.2 使用图形化界面进行操作 3 Putty软件3 FileZilla软件 前言 本篇博客的应用场景&#xff0c;前提条件如下&a…

4.1.2串的存储结构

串的存储结构和线性表类似 串的顺序存储&#xff1a; 缺点就是长度不可变&#xff08;也就是静态数组存储&#xff09; 函数执行结束存储空间自动回收 需要使用free函数回收 串的顺序存储&#xff1a; 方案二的缺点&#xff1a; char[0]存储length&#xff0c;但是由于char的…

智能学习 | MATLAB实现FA-BP多输入单输出回归预测(萤火虫算法优化BP神经网络)

智能学习 | MATLAB实现FA-BP多输入单输出回归预测(萤火虫算法优化BP神经网络) 目录 智能学习 | MATLAB实现FA-BP多输入单输出回归预测(萤火虫算法优化BP神经网络)预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现FA-BP多输入单输出回归预测(萤火虫算法优化B…

基于铜锁构建Web在线加密工具库

基于铜锁构建Web在线加密工具库 搭建运行环境 实验⼿册中的实验都是以 docker 和 docker-compose 环境为主&#xff0c;基于 Ubuntu 20.04 容器镜像。 初始化项目 首先利用 IDE 创建一个 tongsuo_web 的空项目&#xff0c;接下来我们所有的文件都会创建在该项目中&#xff0…

学习系统编程No.19【进程间通信之控制进程】

引言&#xff1a; 北京时间&#xff1a;2023/4/13/8:00&#xff0c;早八人&#xff0c;早八魂&#xff0c;时间不怎么充足&#xff0c;磨磨引言刚好&#xff0c;学习Linux和Linux有关的系统级知识已经许久了&#xff0c;在不知不觉之中&#xff0c;发现自己已经更到了第19篇&a…

3D视觉之深度相机方案

随着机器视觉&#xff0c;自动驾驶等颠覆性的技术逐步发展&#xff0c;采用 3D 相机进行物体识别&#xff0c;行为识别&#xff0c;场景 建模的相关应用越来越多&#xff0c;可以说 3D 相机就是终端和机器人的眼睛。 3D 相机 3D 相机又称之为深度相机&#xff0c;顾名思义&…

openDriver开源插件main.js源码分析

、基础要求 阅读本文章需要对以下知识有相关的了解 Threejs 3D渲染引擎dat.gui界面控制插件webgl三维绘图协议、着色器相关知识UV坐标、XYZ惯性坐标XODR文件格式 拓展 自动驾驶场景仿真标准&#xff08;一&#xff09;- OpenDRIVE - 知乎 《OpenDRIVE1.6规格文档》3_open…

2023年SICWGHS两大高含金量商赛组队招募中

想参加商赛&#xff0c;问了周围一圈朋友&#xff0c;不是没时间就是没兴趣&#xff0c;找个靠谱的队友怎么这么难&#xff1f; 相信这是不少商赛热爱者的共同烦恼&#xff0c;别急&#xff01;翰林来承包你的“找队友”任务&#xff0c;各路学霸等你来pick&#xff01; 两大…

屏幕亮度调节工具:Simple Screen Shade Mac

Simple Screen Shade Mac版是mac上一款优秀的屏幕颜色亮度调节工具&#xff0c;能够让我们Mac电脑的显示器背景变暗&#xff0c;这样可以保护你眼睛的健康并保持舒适。Simple Screen Shade 旨在实现最大程度的简单性和易用性。你可以设置灰色背景以减轻明亮鲜艳的色彩&#xff…

上海亚商投顾:沪指跌近2%险守3300点 AI概念股集体重挫

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日放量调整&#xff0c;深成指午后跌超2%&#xff0c;沪指、创业板指均跌近2%&#xff0c;科创50指数跌…

java-word模板转化为pdf

文章目录 一、引入包1.1在pom引入1.2 因为我们的项目是打包成jar,所以以上方法在本地idea运行没有问题&#xff0c;linux系统不行1.2.1解决方法11.2.2解决方法2 二、配置文件--License.xml--去除水印2.1 license.xml直接放到resources的根目录下即可2.2 工具类 三、调用效果 一…

部署架构 因为单体架构痛点 升级到微服务架构

如图为单体部署 痛点 多人协作可能产生很多的回归测试 代码管理复杂度提升 软件包升级会导致增加测试次数 举例 单体电商 1增加功能(增加小程序平台) 2 并发增加 出现 1 代码复用 2 系统间相互调用 3 接口不仅要对外服务&#xff0c;也得对内提供接口 4 数据分析功…

OTG是什么意思?

OTG是什么意思&#xff1f; OTG是怎么样实现的&#xff1f; TYPE-C接口的手机如何实现同时充电OTG功能&#xff1f; OTG是什么意思&#xff1f; OTG是On-The-Go的缩写&#xff0c;是一项新兴技术&#xff0c;主要应用于不同的设备或移动设备间的联接&#xff0c;进行数据交…

腾讯安全助力高校信息安全建设,护航湾区教育高质量发展

2023年4月20日-21日&#xff0c;首届大湾区信息网络安全大会在广州市长隆国际会展中心隆重召开。会议以“同筑安全屏障&#xff0c;共赢湾区未来”为主题&#xff0c;旨在响应国家安全战略&#xff0c;推动粤港澳大湾区信息网络安全的建设和发展&#xff0c;保障经济社会稳定运…

「OceanBase 4.1 体验」|国产分布式数据库不好用?别再打脸了

文章目录 分布式数据库分布式数据库有哪些&#xff1f;OceanBase4.1安装部署Index Skip Scan总结 随着互联网的高速发展和数据量的爆炸式增长&#xff0c;如何能够高效、可靠、安全地存储海量数据成为了每个企业的重要课题。 分布式数据库 分布式数据库通常是由多个独立的数据…

无人机各个类型介绍

为了执行&#xff0c;无人机可能由类似的元件制成&#xff0c;但无论是它们的能力&#xff0c;还是由什么组成的&#xff0c;它们都在某种程度上有所不同。大多数无人机都是为了执行特定任务而制造的&#xff0c;因此以特定的方式建造&#xff0c;以适应它们将要使用的环境。 …