利用相機SDK采相轉換至HImage

來源于http://blog.sina.com.cn/s/blog_d40acd530102xndm.html

Halcon采相功能非常強大,基本支持各大品牌以及各個通信接口的相機,并且Halcon提供為相機廠商提供了制作Halcon相機接口庫的辦法,總之Halcon基本可以直接連接所有工業相機。

但是Halcon連接相機采相存在兩個問題:一是相機參數可調整范圍有限,不如相機的SDK提供的可調參數多;二是相機SDK提供了采相回調函數,采相實時性更好(Halcon下也可回調,沒研究過)。因此大部分機器視覺工程師仍然采用相機SDK采相。

使用相機SDK采相,必然面臨的問題就是如何將圖像在內存中直接轉換為HImage格式。今天我們將學習如何將內存中的圖像轉化為HImage。

首先,簡單介紹三個算子;然后,縱向比較三個算子不同點;最后,舉例說明算子的用法。

gen_image1( : Image : Type, Width, Height, PixelPointer : )

從像素指針創建圖像,即得到像素的內存指針(PixelPointer),已知圖像的類型(Type)、尺寸(Width、Height)就可將其轉化為HImage。

gen_image3(: ImageRGB : Type, Width, Height, PixelPointerRed, PixelPointerGreen, PixelPointerBlue : )

?從像素指針創建圖像,即得到像素的RGB三通道內存指針(PixelPointerRed、PixelPointerGreen、PixelPointerBlue),已知圖像的類型(Type)、尺寸(Width、Height)就可將其轉化為HImage。

gen_image_interleaved( : ImageRGB : PixelPointer, ColorFormat, OriginalWidth, OriginalHeight, Alignment, Type, ImageWidth, ImageHeight, StartRow,StartColumn, BitsPerChannel, BitShift : )

?從像素指針創建圖像,即得到像素的內存指針(PixelPointer),已知圖像的類型(ColorFormat)、尺寸(ImageWidth、ImageHeight)就可將其轉化為HImage。

gen_image1適合于單通道圖像轉化,gen_image3轉化需要分別知道RGB三個通道的指針,gen_image_interleaved轉化需要知道圖像的內存的總指針以及圖像的格式。

因此gen_image1適合單通道灰度圖轉化,gen_image3適合RGB三通道內存分別存放的相機轉化,gen_image_interleaved基本適合所有格式的轉化,操作簡單且可以進行ROI操作,因為大部分相機采相為1個總指針,所以gen_image_interleaved適用范圍非常廣,所以我們首先結合Halcon的例子來展示一下這個算子的魅力。

*1.讀取圖像

read_image (Image, 'lena')

*2.將圖像分離為三通道后合并得到圖像總指針(這一步是一個外部函數,大家不必關心,因為相機SDK基本可以直接拿到這個指針)

rgb3_to_interleaved (Image,ImageInterleaved)

get_image_pointer1?(ImageInterleaved,Pointer, TypeRGB, Width, Height)

dev_close_window ()

dev_open_window (0, 0, Width / 3, Height,'black', WindowHandle)

dev_set_part (0, 0, Height, Width / 3)

*3圖像由內存中轉化為HImage

gen_image_interleaved (BImageRGB1, Pointer,'rgb', Width / 3, Height, -1, 'byte', 0, 0, 0, 0, -1, 0)

stop ()

*4圖像由內存中轉化為HImage,并進行ROI

gen_image_interleaved (BImageRGB2, Pointer,'rgb', Width / 3, Height, -1, 'byte', Width / 6, Height / 2, Height / 3, Width/ 12, -1, 0)

stop ()

*5圖像格式有RGB定義為BGR,展示這個功能主要是想提醒小伙伴,如果轉化火來顏色不對,可能是由于格式選擇錯誤

gen_image_interleaved (BImageBGR1, Pointer,'bgr', Width / 3, Height, -1, 'byte', 0, 0, 0, 0, -1, 0)

接下來我們將結合度申相機SDK來展示如何從將圖像由內存轉化至HImage

首先我們來看度申相機SDK的采相回調函數如下:

??public ?int _dvpStreamCallback (uint handle, dvpStreamEvent _event, IntPtr pContext, refdvpFrame refFrame, IntPtr pBuffer)

handle——相機句柄

refFrame——幀信息

pBuffer——數據內存指針

那么數據內存指針就有了,接著我們查看幀信息中有什么,打開類定義如下

????publicstructdvpFrame

???????{

????????[Description("是否水平翻轉")]

????????publicbyte bFlipHorizontalState;

????????[Description("是否垂直翻轉")]

????????publicbyte bFlipVerticalState;

????????[Description("位寬")]

????????publicdvpBits bits;

????????[Description("是否逆時針旋轉")]

????????publicbyte bRotateOpposite;

????????[Description("是否旋轉90度")]

????????publicbyte bRotateState;

????????[Description("模擬增益")]

????????publicfloat fAGain;

????????[Description("曝光時間(微秒)")]

????????publicdouble fExposure;

????????[Description("格式")]

????????publicdvpImageFormat format;

????????[Description("高度")]

????????publicint iHeight;

????????[Description("寬度")]

????????publicint iWidth;

????????[Description("第一個像素點的位置")]

????????publicdvpFirstPosition position;

????????[Description("保留字節")]

????????publicuint[] reserved;

????????[Description("字節數")]

????????publicuint uBytes;

????????[Description("幀編號")]

????????publiculong uFrameID;

????????[Description("時間戳")]

????????publiculong uTimestamp;

???????}

gen_image_interleaved(: ImageRGB : PixelPointer, ColorFormat, OriginalWidth, OriginalHeight, Alignment, Type, ImageWidth, ImageHeight, StartRow,StartColumn, BitsPerChannel, BitShift : )

從幀信息中可以得到圖像格式、位數、圖像寬度、圖像高度,于是gen_image_interleaved的必備參數全部得到。

寫到C#格式下

public ?int _dvpStreamCallback0(uint handle, dvpStreamEvent _event, IntPtr pContext, refdvpFrame refFrame, IntPtr pBuffer)

????{ ?????????

?????if (ho_Img != null)

???????{

?????????ho_Img.Dispose();//釋放HIamge資源

???????}

?????else

??????{

???????HOperatorSet.GenEmptyObj(out ho_Img);//初始化HImage

??????}

?????if ((long)pBuffer != 0)

?????{

??????HOperatorSet.GenImageInterleaved(out ho_Img, pBuffer, "bgr", refFrame.iWidth, refFrame.iHeight, -1, "byte", refFrame.iWidth,refFrame.iHeight, 0, 0, -1, 0);//格式轉換

??????}

??????GC.GetTotalMemory(true);//需要實時將圖像的內存回收掉,防止占用過多CPU資源控制系統垃圾回收器,專制內存不足 ???

}

?

參考這個相機SDK采相轉HImage的例子,各位小伙伴應該學會如何使用相機SDK再Halcon中采相了吧。

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

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

相關文章

java項目啟動tomcat沒報錯,然后頁面報404無法找到,重新編譯后,出現以下狀態...

嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanCreationException: Error creating bean with name MapperScannerConfigurer defined in c…

3.12PMP試題每日一題

哪一個是組織過程資產的事例:A、項目管理信息系統B、配置管理姿勢庫C、配置管理系統D、共享系統和云計算 作者:Tracy19890201(同微信號)轉載于:https://blog.51cto.com/13554215/2361982

相機與鏡頭常識

1.焦距(FocalLength)   焦距是從鏡頭的中心點到膠平面上所形成的清晰影像之間的距離。焦距的大小決定著視角的大小,焦距數值小,視角大,所觀察的范圍也大;焦距數值大,視角小,觀察范…

vsftpd的安裝

簡介 vsftpd是一個免費的開源的ftp服務器軟件; 特點 小巧輕快,安全易用,支持虛擬用戶、支持帶寬限制等功能; 安裝 執行 yum -y install vsftpd 創建虛擬用戶(注意權限問題(chmod),這個要根據情況來定) 選擇在根或用戶目…

halcon模板匹配測試流程

*1、創建模板(獲取要做模板區域的圖像) *create_shape_model (ImageReduced, 4, 0, rad(360), rad(1), none, use_polarity, 30, 10, ModelID) *2、獲取形狀模型---第二步(為了顯示找的的模板) *get_shape_model_contours (…

企業云存儲:為什么中大型企業偏愛自建私有云?

“上云?我們通常自建企業私有云。”9102年了,在云存儲服務的選擇上,中大型企業基本步調一致,統籌規劃自建企業私有云。為什么中大型企業都偏愛自建企業私有云?一、長久的成本考量從賬面上看,通常私有云初期…

ETL作業調度軟件TASKCTL自定義擴展作業類型插件安裝

TASKCTL批量自動化調度作業類型擴展插件的安裝方法如下幾種: 1、 直接覆蓋法 直接覆蓋法的意思就是將自定義擴展好的插件,通常是一個shell腳本,上傳至后臺調度核心服務上,然后修改后臺任務類型的XML元素配置文件即可。 注意&#…

遞歸就這么簡單

遞歸介紹 本來預算此章節是繼續寫快速排序的,然而編寫快速排序往往是遞歸來寫的,并且遞歸可能不是那么好理解,于是就有了這篇文章。 在上面提到了遞歸這么一個詞,遞歸在程序語言中簡單的理解是:方法自己調用自己 遞歸其…

阿里云RPA(機器人流程自動化)干貨系列之二:認識RPA(下)

2019獨角獸企業重金招聘Python工程師標準>>> 導讀:本文是阿里云RPA(機器人流程自動化)干貨系列之二,主要介紹了RPA的發展齊納經和主要使用場景有哪些,目前國內外主流的RPA廠商以及RPA的未來在哪。 一、RPA的…

C# 圖片的讀取

//圖片轉成二進制public byte[] GetPictureData(string imagepath){/**/根據圖片文件的路徑使用文件流打開,并保存為byte[] FileStream FileStream new FileStream(imagepath, FileMode.Open);byte[] byData new byte[FileStream.Length];FileStream.Read(byData,…

SDOI2010 地精部落

題目描述 傳說很久以前,大地上居住著一種神秘的生物:地精。 地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為N的山脈H可分為從左到右的N段,每段有一個[b][u]獨一無二[/u][/b]的高度Hi,其中Hi是1到N之間的正整數。 …

Codechef Yet another cute girl

題意大概就是讓你求一下[L,R]中的約數個數是素數的數的個數。 其中1<L<R<1e12,R-L<1e6. 然后我寫了兩種做法&#xff0c;第一種是可以直接搞出來L-R的約數個數&#xff0c;然后直接統計一下就好了。 這個的復雜度大致是 O((R-L) * log(R-L)) 第二種就是需要先發現滿…

簡單弄一個-個人主頁

--- 整理一下已經發表的文章 JAVA基礎 java基礎數據結構之-紅黑樹(插入)java基礎數據結構之-紅黑樹(刪除)了解一下jdk動態代理的本質了解一下cglib動態代理的本質SpringBoot源碼解析 前言&#xff1a;閱讀springboot源碼之前&#xff0c;最好對spring源碼有一定的了解&#xff…

Halocn OCR識別入門學習

一、建立OCR庫 dev_close_window() read_image(Image,OCR) get_image_size(Image,Width,Hight) dev_open_window(0,0,Width,Hight,black,Window) dev_display(Image)*字符處理 rgb1_to_gray(Image,ImageGray) *鼠標畫你要找的roi區域 draw_rectangle1(Window,Row1,Column1,Row…

ctsc2009 移民站選址

分析&#xff1a;非常非常好的一道題&#xff01; 首先需要對問題進行轉化&#xff1a; 行列無關&#xff0c;對于行單獨處理&#xff0c;對于列單獨處理必然存在一個最優方案使得每一個新站與舊站重合.轉化1很顯然&#xff0c;對于轉化2&#xff0c;是一類非常經典的“中位數問…

Jenkins 安裝與使用--實例

參考了博客Jenkins master在windows上安裝 Jenkins的主要功能是監視反復工作的運行&#xff0c;比如軟件project的構建詳細地&#xff1a; *軟件的持續構建和測試 本質上提供了一個易于使用的持續集成系統。使得開發者更easy地將改變集成到project中。使得用戶更easy獲得一個…

后端項目搭建技術棧

Koa2&#xff1a;koa-bodyparser koa-router koa-session koa-corsTypeScript數據庫&#xff1a;Mysql &#xff08;庫&#xff1a;Sequelize&#xff09;表單驗證庫&#xff1a;Joi

C# 實體類幾種深拷貝的方法——解決關于對象賦值,A=B,A改變,B也改變問題

幾種常見的深拷貝方式 1、利用反射實現 public static T DeepCopyByReflection<T>(T obj) {   if (obj is string || obj.GetType().IsValueType)   return obj; object retval Activator.CreateInstance(obj.GetType());   FieldInfo[] fields obj.GetType().…

Hadoop學習之路(九)HDFS深入理解

HDFS的優點和缺點 HDFS的優點 1、可構建在廉價機器上 通過多副本提高可靠性&#xff0c;提供了容錯和恢復機制 服務器節點的宕機是常態 必須理性對象 2、高容錯性 數據自動保存多個副本&#xff0c;副本丟失后&#xff0c;自動恢復 HDFS的核心設計思想&#xff1a; 分散均勻…

關于Unity中的聲音管理模塊(專題七)

聲音的要素 1: 音頻文件AudioClip2: 音源AudioSource;3: 耳朵AudioListener;//全局只能有一個4: 2D/3D音頻;//2D只是簡單地播放聲音&#xff0c;3D可以根據距離衰減音量 怎樣聽到聲音&#xff1a; 創建一個節點&#xff0c;掛載AudioSource組件&#xff0c;AudioSource組件關聯…