久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

利用相機SDK采相轉換至HImage

 新用戶0118F7lQ 2022-03-13

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

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

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

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

gen_image1( : Image : TypeWidthHeightPixelPointer : )

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

gen_image3(: ImageRGB : TypeWidthHeightPixelPointerRedPixelPointerGreenPixelPointerBlue : )

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

gen_image_interleaved( : ImageRGB : PixelPointerColorFormatOriginalWidthOriginalHeightAlignmentTypeImageWidthImageHeightStartRow,StartColumnBitsPerChannelBitShift : )

 從像素指針創(chuàng)建圖像,即得到像素的內存指針(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)

圖片

原圖

圖片 

RGB轉化結果

圖片

快速ROI

圖片

BGR轉化

    接下來我們將結合度申相機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('保留字節(jié)')]

        publicuint[] reserved;

        [Description('字節(jié)數')]

        publicuint uBytes;

        [Description('幀編號')]

        publiculong uFrameID;

        [Description('時間戳')]

        publiculong uTimestamp;

       }

gen_image_interleaved(: ImageRGB : PixelPointerColorFormatOriginalWidthOriginalHeightAlignmentTypeImageWidthImageHeightStartRow,StartColumnBitsPerChannelBitShift : )

從幀信息中可以得到圖像格式,、位數、圖像寬度,、圖像高度,,于是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資源控制系統(tǒng)垃圾回收器,,專制內存不足    

}

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

如有收獲,,請轉發(fā)支持!,!

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多