Baumer工業相機堡盟工業相機如何聯合GAPI SDK和OpenCV實現相機圖像將圖像轉換為Mat格式再轉為Bitmap圖像進行顯示(C#)

Baumer工業相機堡盟工業相機如何聯合GAPI SDK和OpenCV實現相機圖像將圖像轉換為Mat圖像格式再轉為Bitmap圖像進行顯示(C#)

  • Baumer工業相機
  • Baumer工業相機的圖像轉換為OpenCV的Mat圖像的技術背景
  • 代碼分析
    • 第一步:先引用OpenCV庫
    • 第二步:在回調函數里進行Buffer圖像轉換為OpenCV圖像再轉為Bitmap圖像
    • 聯合OpenCV實現相機圖像轉換為Mat圖像再轉換為Bitmap測試演示圖
  • 工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式的優勢
  • 工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式的行業應用

?

Baumer工業相機

Baumer工業相機堡盟相機是一種高性能、高質量的工業相機,可用于各種應用場景,如物體檢測、計數和識別、運動分析和圖像處理。

Baumer的萬兆網相機擁有出色的圖像處理性能,可以實時傳輸高分辨率圖像。此外,該相機還具有快速數據傳輸、低功耗、易于集成以及高度可擴展性等特點。
?
Baumer工業相機NEOAPI SDK是用于Baumer工業相機的一款最新的軟件開發工具包(SDK)。它為開發人員提供了一系列API和工具,用于與Baumer工業相機進行通信和控制,控制方式極為便捷類似Halcon的相機助手類控制方式。?

在使用工業視覺軟件集成工業相機時,常常需要將工業相機SDK中一些功能整合到圖像處理軟件中,方便項目的推進使用;比如將SDK中采集的圖像數據轉換為適合圖像格式如Bitmap等或者Opencv的Mat圖像數據格式,再進行圖像處理從而開啟圖像處理任務;

注意:本文是基于Baumer的NEOAPI SDK的基礎上聯合OpenCV使用C#語言來實現相機圖像將圖像轉換為Mat圖像格式再轉為Bitmap圖像進行顯示。

Baumer工業相機的圖像轉換為OpenCV的Mat圖像的技術背景

工業相機的圖像轉換為OpenCV的Mat圖像涉及到圖像數據的采集、處理和存儲方式。以下是這一技術背景:

  1. 圖像采集:工業相機使用圖像傳感器采集現實世界的光學信息,并將其轉換為數字圖像數據。這些數據可以是灰度圖像(單通道)或彩色圖像(多通道)。

  2. 數據格式:工業相機的圖像數據可以以不同的格式進行存儲,如RAW、RGB、YUV等。這些格式反映了像素值的排列方式以及顏色信息的表示形式。

  3. OpenCV庫:OpenCV是一個開源的計算機視覺庫,廣泛用于處理圖像和視頻數據。它提供了豐富的函數和工具,可以用于加載、處理和存儲圖像數據。

  4. Mat對象:在OpenCV中,圖像數據通常表示為Mat對象,Mat對象包含了圖像的像素值以及相關的元數據,如圖像大小、通道數等。

  5. 數據轉換:將工業相機的圖像數據轉換為OpenCV的Mat圖像通常涉及到數據格式的解析和轉換,確保圖像數據能夠正確地加載和處理。這可能需要考慮到圖像的通道數、位深度、顏色空間等方面的轉換和處理。

因此,將工業相機的圖像數據轉換為OpenCV的Mat圖像需要理解工業相機圖像數據的格式和特性,并使用OpenCV提供的函數和工具進行適當的數據解析和轉換。

代碼分析

本文介紹使用BGAPI SDK對Baumer的JPEG工業相機進行開發時,使用通過BGAPI SDK和OpenCV進行圖像轉換的功能

第一步:先引用OpenCV庫

本文使用“opencv_ffmpeg410_64.dll”和其它常用OpenCV庫作為功能應用顯示視頻生成功能
C#環境下引用OpencCV庫代碼如下所示:

using OpenCvSharp;
using OpenCvSharp.Dnn;
using OpenCvSharp.Extensions;

第二步:在回調函數里進行Buffer圖像轉換為OpenCV圖像再轉為Bitmap圖像

后續進行圖像轉換為OpenCV庫的Mat圖像的核心代碼,如下所示:

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 againmBufferFilled.QueueBuffer();}else{#region//獲取當前FrameIDFrameIDInt = (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;#endregionlong currenttime = (long)mBufferFilled.Timestamp;                   DateTime sdasd = GetTime(currenttime, true);#region//對四張圖像進行基礎拼接OpenCvSharp.Mat Matgray1 = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用bitmap轉換為mat  OpenCvSharp.Mat Matgray2 = Matgray1;OpenCvSharp.Mat Matgray3 = Matgray1;OpenCvSharp.Mat Matgray4 = Matgray1;Mat panorama1 = new Mat();Mat panorama2 = new Mat();Mat panoramaResult = new Mat();Cv2.VConcat(Matgray1, Matgray2, panorama1);Cv2.VConcat(Matgray3, Matgray4, panorama2);Cv2.HConcat(panorama1, panorama2, panoramaResult);         #endregion// 重新確認轉換圖像后的長寬,再轉換為Bitmap圖像int imageWidth = panoramaResult.cols;int imageHeight = panoramaResult.rows;width = imageWidth;height = imageHeight;Bitmap bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(panoramaResult);//用mat轉換為bitmap              panorama1.Dispose(); panorama2.Dispose(); panoramaResult.Dispose();#region//回調函數保存圖像功能if (bSaveImg){if (!AutoSaveCheck.Checked & !ContinueSave.Checked){//使用bitmap自帶函數保存string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");string saveimagepath = pImgFileDir + "\\" + strtime + ".jpg";bmp.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);            bSaveImg = false;//變量控制單次保存圖像}                              }#endregion#region//新復制bmp的圖像數據復制pBitmapBitmap clonebitmap = (Bitmap)bmp.Clone();BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, width , 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);#endregionclonebitmap.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;
}

聯合OpenCV實現相機圖像轉換為Mat圖像再轉換為Bitmap測試演示圖

測試使用OPENCV實現圖像轉換為Mat圖像格式拼接為2x2后再轉換為Bitmap圖像進行顯示如下所示:

在這里插入圖片描述

工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式的優勢

工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式具有多個優勢:

  1. 數據處理方便:OpenCV提供了豐富的函數和方法,可以方便地加載、處理和保存圖像數據,使用Mat對象能夠輕松地進行各種圖像處理操作,如濾波、旋轉、裁剪等。

  2. 跨平臺性:OpenCV是一個跨平臺的計算機視覺庫,能夠在多種操作系統上運行,包括Windows、Linux、Mac等,這意味著工業相機可以與不同平臺上的OpenCV庫進行集成,實現更廣泛的應用。

  3. 功能豐富:OpenCV提供了豐富的圖像處理和計算機視覺功能,包括特征檢測、目標跟蹤、三維重建等,工業相機轉換為Mat圖像格式后,可以直接利用OpenCV的這些功能進行更加復雜的圖像處理和分析。

  4. 社區支持:OpenCV擁有龐大的開發者社區和豐富的文檔資源,工業相機開發人員可以從社區中獲得支持和解決問題,且能夠充分利用社區貢獻的相關功能模塊。

  5. 效率高:通過OpenCV實現相機圖像轉換為Mat圖像格式可以實現高效的圖像處理和數據存儲,使得工業相機的應用具有更高的性能和響應速度。

綜上所述,工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式具有便捷的數據處理、跨平臺性、豐富的功能、社區支持和更高的效率等多方面的優勢。

工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式的行業應用

工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式的行業應用包括但不限于:

  1. 制造業:工業相機通過OpenCV可以用于制造業中的產品質量檢測、零部件尺寸測量、缺陷檢測等應用。將相機圖像轉換為Mat圖像格式后,可以利用OpenCV的豐富功能進行圖像分析和質量控制。

  2. 醫療行業:在醫療行業,工業相機與OpenCV結合可以用于醫學影像的分析和診斷,如X射線圖像處理、醫學超聲圖像處理等,有助于提高醫學影像數據的分析和診斷效率。

  3. 農業領域:工業相機通過OpenCV實現的圖像轉換可應用于農業領域的作物生長監測、果蔬質量檢測、病蟲害檢測等領域。OpenCV的圖像處理功能可以幫助農業領域實現高效的數據采集和分析。

  4. 智能交通:工業相機結合OpenCV可以用于智能交通系統中的車輛識別、車牌識別、交通監控等場景,實現對交通數據的實時采集和分析。

  5. 智能制造:在智能制造領域,工業相機通過OpenCV實現的圖像轉換可以用于生產過程監控、產品質量分析、智能機器人視覺導航等應用,提高制造生產的智能化和自動化程度。

綜上所述,工業相機通過OpenCV實現相機圖像轉換為Mat圖像格式在制造業、醫療、農業、智能交通以及智能制造等多個行業應用中發揮著關鍵作用,為這些行業提供了高效的圖像采集、處理和分析解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

貪心 Leetcode 56 合并區間

合并區間 Leetcode 56 學習記錄自代碼隨想錄 以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間&#xff0c;并返回 一個不重疊的區間數組&#xff0c;該數組需恰好覆蓋輸入中的所有區間 。 示例 1…

C++的繼承和多態

繼承和多態 繼承繼承的權限繼承的子父類訪問派生類的默認成員函數菱形繼承&#xff08;C獨有&#xff09;【了解】虛擬繼承什么是菱形繼承&#xff1f;菱形繼承的問題是什么&#xff1f;什么是菱形虛擬繼承&#xff1f;如何解決數據冗余和二義性的繼承和組合的區別&#xff1f;…

揭秘Android Tombstone:崩潰位置的秘密研究-Crash Location

由于一些工作原因&#xff0c;最近對Android系統發生crash的Tombstone展開了一定的研究。 這里我談一下關于對于Android Libstagefright 整數溢出漏洞的crash Tombstone的研究。看一下在包含整數溢出功能的MP4文件從PC傳輸進Android的時候造成的Tombstone0_0。 1、研究頭部信…

雙通道 40V 160mΩ車規級高側電源開關帶診斷功能反向電池保護功能

概述 PC8916是雙通道、高功率具有集成NMOS功率FET的開關&#xff0c;以及電荷泵。該設備集成了高級 保護功能&#xff0c;例如負載電流限制&#xff0c;通過功率限制進行過載主動管理帶可配置閉鎖的超溫停機。全面診斷和高精度電流感應這些功能實現了對負載的智能控制。有源漏…

[C++] 統計程序耗時

一、簡介 使用clock()函數記錄程序開始、結束時間戳。然后將開始結束時間戳差除以CLOCKS_PER_SEC得到程序的耗用的時間&#xff08;秒數&#xff09;。 二、代碼示例 #include <iostream> #include <time.h> #include <math.h> int main(int, char **) {clo…

JetPack 5.1編譯mish_cuda

1.查看jetpack版本:sudo jtop 自帶的就有cuda11.4和cudnn8.X以及python3.8,我的cudnn就沒有是后期自己安裝的 2.安裝torch PyTorch for Jetson - Announcements - NVIDIA Developer Forums 選擇對應的cuda版本和torch版本,我下載的是:torch-2.1.0a0+41361538.nv23.06-cp…

ETL數據倉庫的使用方式

一、ETL的過程 在 ETL 過程中&#xff0c;數據從源系統中抽取&#xff08;Extract&#xff09;&#xff0c;經過各種轉換&#xff08;Transform&#xff09;操作&#xff0c;最后加載&#xff08;Load&#xff09;到目標數據倉庫中。以下是 ETL 數倉流程的基本步驟&#xff1a…

2024中國5G隨身WiFi十大品牌排行榜,20245G隨身口碑排行榜,5G隨身WiFi2024最新款!5G隨身WiFi推薦測評

【中國品牌網中國3C質量評測中心權威榜單聯合發布】 第一名&#xff1a;格行5G隨身WiFi&#xff1a; 優點&#xff1a;隨身WiFi行業的頭部和領跑品牌&#xff0c;15年專業物聯網行業經驗&#xff0c;格行在技術研發、產品創新和客戶服務方面具有很高的口碑&#xff0c;被業內…

通過一篇文章讓你了解數據結構和算法的重要性

通過一篇文章讓你了解數據結構和算法的重要性 前言一、 什么是數據結構&#xff1f;二、什么是算法&#xff1f;三、數據結構和算法的重要性在校園招聘的筆試中&#xff1a;在校園招聘的面試中&#xff1a;在未來的工作中&#xff1a; 四、如何學好數據結構和算法4.1 死磕代碼&…

基于React全棧Sora AI視頻案例展示項目

花了一天時間基于React Next全棧開發的Sora AI 演示項目 Preview: https://sora.langchat.cn/ Github&#xff1a;https://github.com/tycoding/lang-sora 歡迎大家star、fork呀&#xff01; 這是一套完整的React & Next.js項目&#xff0c;包含前后端交互、路由、數據庫…

crc16計算

crc16計算&#xff0c;以生成式G(x)x16x15x21,為例 1、函數如下&#xff1a; //crc&#xff1a;G(x) x16x15x21 #define POLY 0x8005 //對應的生成式的多項式&#xff0c;可以查&#xff08;在在線計算crc工具下查&#xff09; unsigned short crc16_2(unsigned char *da…

CBAM注意力機制詳解(附pytorch復現)

簡介 論文原址&#xff1a;1807.06521.pdf (arxiv.org) CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一種卷積神經網絡模塊&#xff0c;旨在通過引入注意力機制來提升網絡的表示能力。CBAM包含兩個順序子模塊&#xff1a;通道注意力模塊和空間注意力…

算法項目的合作流程

算法項目的合作流程通常包括以下幾個關鍵步驟&#xff0c;以上是算法項目合作的基本流程&#xff0c;具體項目可能會根據實際情況進行調整和補充。在整個項目過程中&#xff0c;良好的溝通、協作和團隊合作至關重要&#xff0c;能夠確保項目按時高質量地完成。北京木奇移動技術…

回歸啦!!!

消失的日子在實習&#xff0c;今天最后一天了來看看自己的學習日志&#xff0c;有沒有可以和小伙伴交流的部分吧&#xff01; 目錄 一、產品one ①簡介 ②底層原理 ③知識點一 作用一&#xff1a;日志采集 作用二&#xff1a;實時監測 作用三&#xff1a;規則匹配 作用…

Redis沖沖沖——事務支持,AOF和RDB持久化

目錄 引出Redis事務支持&#xff0c;AOF和RDB持久化1、Redis的事務支持2、Redis的持久化 Redis沖沖沖——緩存三兄弟&#xff1a;緩存擊穿、穿透、雪崩緩存擊穿緩存穿透緩存雪崩 總結 引出 Redis沖沖沖——事務支持&#xff0c;AOF和RDB持久化 Redis事務支持&#xff0c;AOF和…

codeforces 1868A

題目鏈接 思路 當 m 1 m1 m1時 發現是 M M M是一條 0 0 0的縱列&#xff0c;最后結果是 0 0 0 其余構造方法大體為&#xff1a;每行把上一行第一位元素移到隊尾 當 n < m ? 1 n<m-1 n<m?1時 我們可以如下構造 0,1,2,3,4…m-1 1,2,3,4…m-1,0 2,3,4…m-1,0,1…

【內部消息】24上半年軟考可能支持平板、PC和手機等多平臺報名

根據內部消息&#xff0c;軟考網上報名系統正在改革&#xff0c;之前只能通過PC端報名的&#xff0c;下次報名可能支持平板、手機等多終端進行網上報名了。現在官方并沒有確切消息發出&#xff0c;這次變動可能發生在2024上半年&#xff0c;也有可能得到下半年才能實行。以下是…

一文讀懂MES之工藝路線

什么是工藝路線 工藝路線&#xff0c;又被稱為生產工藝流程或生產流程路線&#xff0c;是指在進行產品或零件的生產過程中&#xff0c;按照一定的生產順序排列的一系列的工藝過程。簡單來說就是如何從原材料或者半成品零件&#xff0c;一步一步加工和制作&#xff0c;最終制作…

LeetCode_Java_動態規劃系列(2)(題目+思路+代碼)

131.分割回文串 給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 示例 1&#xff1a; 輸入&#xff1a;s "aab" 輸出&#xff1a;[["a&qu…

InnoDB索引與優化篇(3)-事務隔離級別與InnoDB的應用

MySQL是一種常用的關系型數據庫管理系統&#xff0c;而事務是數據庫中常用的一種機制。在MySQL中&#xff0c;事務的隔離級別以及使用InnoDB引擎進行事務處理是非常重要的。在本博客中&#xff0c;我們將探討MySQL數據庫事務隔離級別和InnoDB的應用。 事務是一組數據庫操作的集…