Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强(C#)

news2024/10/4 21:24:51

Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强(C#)

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

Baumer工业相机

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

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

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

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

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

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

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

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

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

本文这里只简单使用Baumer工业相机进行拉普拉斯的图像算法。

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

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

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的拉普拉斯算法

代码如下(示例),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//对灰度图像进行拉普拉斯算法增强
            OpenCvSharp.Mat Matgray = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat                 
            using (var dst = new Mat())
            {
                 // Define the kernel filter
                 Mat kernel = new Mat(3, 3, MatType.CV_32F, new float[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
                 // Apply the filter using filter2D function
                 Mat filtered = new Mat();
                 Cv2.Filter2D(Matgray, Qualized, -1, kernel);

                   
            }
            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拉普拉斯算法进行图像增强

cv2.Filter2D函数可以对图像进行卷积操作,可以用来实现图像增强、边缘检测等功能。

在OpenCV的C++接口里,filter2D函数的原型为:void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT )。

其中,src和dst分别代表输入和输出的图像,ddepth是输出图像的深度,kernel是卷积核,anchor是卷积核的锚点,delta是输出图像的偏置值,borderType是图像边框扩展的方法。在使用时,需要先定义一个卷积核,然后传入filter2D函数中即可。

C#调用代码如下所示:

 #region//对灰度图像进行拉普拉斯算法增强
            OpenCvSharp.Mat Matgray = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap转换为mat                 
            using (var dst = new Mat())
            {
                 // Define the kernel filter
                 Mat kernel = new Mat(3, 3, MatType.CV_32F, new float[] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
                 // Apply the filter using filter2D function
                 Mat filtered = new Mat();
                 Cv2.Filter2D(Matgray, Qualized, -1, kernel);
                   
            }
            Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(Qualized);//用mat转换为bitmap

            #endregion

呈现效果如下所示:
(未使用拉普拉斯图像算法)
在这里插入图片描述

(使用拉普拉斯图像算法)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3103bf26cb940e6993a4c33e44abaf6.png在这里插入图片描述

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章

数学与应用数学有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是数学与应用数学领域的几个知名SCI期刊&#xff1a; Annals of Mathematics&#xff1a; 成立于1884年&#xff0c;是数学领域最古老和最著名的期刊之一&#xff0c;由普林斯顿大学出版。 该期刊发表了许多重要的数学成果&#xff0c;如Gdel不完全定理、费马大定理证明…

景点VR全景虚拟体验系统定制

为深度挖掘行业特色&#xff0c;利用5G、VR&#xff0c;AI&#xff0c;AR等数字化技术&#xff0c;为行业领域量身打造数字化解决方案已成趋势 VR内容定制可包括: VR旅游、VR展馆、VR教育、VR汽车、VR电商、VR地产等等。我们是国内较早从事沉浸式VR内容开发的企业&#xff0c;在…

Python将Excel文件内容写入Word文件

在日常办公中我们经常需要将Excel文件中的数据写入Word中&#xff0c;如果是手动一个一个进行复制粘贴&#xff0c;那将会非常的耗时且繁琐&#xff01; 遇到这种问题我们首先想到就是利用b编程解决&#xff0c;今天我分享一个excel转word的小方法&#xff01; 首先我有一个E…

儿童乙肝的预防和治疗,看这一篇就够了

儿童乙肝治疗应早期进行从1967年发现乙型肝炎&#xff08;以下简称乙型肝炎&#xff09;病毒&#xff0c;1969年开发乙型肝炎疫苗&#xff0c;到乙型肝炎治疗药物不断出现&#xff0c;乙型肝炎的防治取得了显著成效。目前&#xff0c;乙型肝炎的预防已经取得了积极的效果。儿童…

配置FTP/TFTP协议的ASPF

在多通道协议和NAT的应用中&#xff0c;ASPF是重要的辅助功能。通过配置ASPF功能&#xff0c;实现内网正常对外提供FTP和TFTP服务&#xff0c;同时还可避免内网用户在访问外网Web服务器时下载危险控件。 组网需求 如图1所示&#xff0c;FW部署在某公司的出口&#xff0c;公司提…

Jenkins Harbor

Harbor 环境搭建 https://github.com/goharbor/harbor/releases/tag/v2.5.6 点击下载地址安装包 安装 解压安装包 [rootlocalhost ~]# tar -zxvf harbor-offline-installer-v2.5.6.tgz -C /usr/local/修改harbor.yml配置 [rootlocalhost harbor]# cp harbor.yml.tmpl ha…

VMware vSphere中三种磁盘模式:精简置备/厚置备置零/厚置备延迟置零

在VMware vSphere中&#xff0c;不管是以前的5.1版本&#xff0c;或者是现在的6.5版本&#xff0c;创建虚拟机时&#xff0c;在创建磁盘时&#xff0c;都会让选择磁盘的置备类型&#xff0c;如下图所示&#xff0c;分为&#xff1a; Thick ProvisionedLazy Zeroed(厚置备延迟置…

从0开始使用flask搭建WEB前端可视化界面

目录1.download一个模板2.配置flask python文件3.移动模板中文件的相对位置4.修改html中的原路径5.运行与调试1.download一个模板 模板 将其中的html结尾的文件放入template文件夹&#xff0c;其余的放入static文件夹&#xff0c;再创建一个python文件使用flask&#xff0c;…

亚马逊云科技从成本规划,开启云财务管理之旅

亚马逊云科技的云财务管理旨在帮助企业建立一个成功的CFM战略&#xff1a;通过4个云财务管理CFM原则或步骤作为路线图&#xff1a;SEE-查看、SAVE-保存、PLAN-计划和RUN-运行。 对现有工作负载的预测和规划 1、 优化计算资源与架构&#xff1a;与技术业务相关部门合作&#xff…

AI数字人在VR全景中的应用有哪些?有哪些优势?

“十年生死两茫茫&#xff0c;不思量&#xff0c;自难忘”。以往我们对于逝者的怀念只限于看着老照片落泪&#xff0c;现如今&#xff0c;各种科技的发展让我们的思念有了新的承载之地。AI数字人的出现&#xff0c;可以为用户提供更加智能、有趣的社交体验&#xff0c;通过唇形…

为什么要写博客?现身说法

我为什么不想写博客&#xff1f; 大四学生现身说法&#xff0c;其实早在大二&#xff0c;听各种大牛说写博客的重要性&#xff0c;真的也很想开始动手&#xff0c;但两个很现实的顾虑摆在眼前&#xff1a; 啥都不会&#xff0c;写啥啊&#xff1f;大牛是因为有新东西可写&…

Linux学习[6]文件权限深入1

文章目录前言1. 文件的各个字段含义2. 修改文件权限3. 有点意思的东西总结前言 前六个博客是基于树莓派的linux教程书籍写的&#xff0c;因为之前的书籍是以树莓派为基准&#xff0c;所以在linux上没有很详细。这个博客开始记录的是我看书过程中遇到的有意思的&#xff0c;没见…

提取文本关键词?很 easy 啊,用 Python 三行搞定

从大量文本中提取有用的关键信息是数据分析的一个重要环节。 Python 作为一门广泛应用于数据分析领域的编程语言&#xff0c;有着强大的文本处理库。 整理了几个用于文本关键词提取的优秀工具&#xff0c;一起学习下。 1、jieba库 jieba 是一个中文分词库&#xff0c;可以将…

SpringMVC学习1

一、SpringMVC的概述 SpringMVC是由Spring官方提供的基于MVC设计理念的Web框架MVC是模型、视图、控制器的简写&#xff0c;是软件的一种设计规范MVC将业务逻辑、数据&#xff0c;显示分离的方式来组织代码MVC降低了视图和业务逻辑之间的双向耦合MVC是一种架构模式模型&#xff…

SpringBoot整合接口管理工具Swagger

Swagger Swagger简介 Springboot整合swagger Swagger 常用注解 一、Swagger简介 ​ Swagger 是一系列 RESTful API 的工具&#xff0c;通过 Swagger 可以获得项目的⼀种交互式文档&#xff0c;客户端 SDK 的自动生成等功能。 ​ Swagger 的目标是为 REST APIs 定义一个标…

初识CSRF

概述跨站请求伪造&#xff08;Cross-site request forgery&#xff09;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。CSRF并不是攻击网站服务器&#xff0c;而是冒充用户在站内的正常操作在CSRF的攻击场景中攻…

会话技术.

Cookie 在服务器中写一个Cookie键值对&#xff0c;然后把它扔进响应值中&#xff0c;于是在浏览器访问当前web项目时会得到响应值&#xff0c;并且把这个响应值中的Cookie数据存在浏览器中&#xff0c;下次&#xff0c;在服务器中就可以先获得刚才的Cookie数据&#xff0c;然后…

第六章_Redis管道

是什么 解决思路&#xff08;引出管道这个概念&#xff09; 管道(pipeline)可以一次性发送多条命令给服务端&#xff0c;服务端依次处理完完毕后&#xff0c;通过一条响应一次性将结果返回&#xff0c;通过减少客户端与redis的通信次数来实现降低往返延时时间。pipeline实现的…

【从零开始学Skynet】工具篇(二):虚拟机文件的复制粘贴

大家在Linux系统下开发的时候肯定会遇到虚拟机与主机间无法复制粘贴的问题&#xff0c;现在我们就来解决这样的问题&#xff0c;方便我们的开发。 1、打开设置 我们可以系统界面的菜单栏点击“控制”&#xff0c;然后打开“设置”&#xff1b; 也可以在VirtualBox界面打开“设…

建议企业采购团队学习的采购策略

随着全球市场的不断发展和竞争的日益激烈&#xff0c;企业采购团队必须制定出更加科学、合理的采购策略来适应市场的各种变化。合理的采购策略不仅可以保证企业的采购成本最优化&#xff0c;还可以提高采购效率和质量。因此&#xff0c;建议企业采购团队学会以下几种采购策略&a…