C# 使用Sentech相機sdk 獲取影象,轉換為halcon HImage的兩種方法
阿新 • • 發佈:2018-12-31
在網上搜索半天,沒有找到關於Sentech相機和halcon聯合程式設計的例子,先將自己的程式碼釋出如下.
sentech相機驅動和sdk 下載地址
參考PvPipelineSample這個例子,自己修改後就可以連線相機.
SDK獲得影象型別是其自定義的 PvBuffer
PvImage pvImage = lBuffer.Image; Int32 width = (Int32)pvImage.Width; Int32 height = (Int32)pvImage.Height; Bitmap bitMap = new Bitmap(width, height); pvImage.CopyToBitmap(bitMap); HObject hObject = HImageConvertFromBitmap32(bitMap);
將其轉換成為Bitmap型別,再轉換成為HImage
</pre><p></p><p></p><pre code_snippet_id="1638895" snippet_file_name="blog_20160408_3_2876536" name="code" class="csharp"> private static HObject HImageConvertFromBitmap32(Bitmap bmp) { HObject ho_Image; HOperatorSet.GenEmptyObj(out ho_Image); unsafe { System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); unsafe { HOperatorSet.GenImageInterleaved(out ho_Image, bmpData.Scan0, "bgrx", bmp.Width, bmp.Height, -1, "byte", bmp.Width, bmp.Height, 0, 0, -1, 0); } return ho_Image; } }
第二種方法是使用指標,
在網上看到一段程式碼,是如何獲取byte[]的指標
//byte[] outputData = new byte[2]; //void* p; //IntPtr ptr; //fixed (byte* pc = outputData) //{ // p = (void*)pc; // ptr = new IntPtr(p); //}
查詢相機的api,知道
byte* pter = pvImage.DataPointer;
於是聯想到halcon的gen_image1最後一個引數也是需要指標
void HImage.GenImage1(string type, int width, int height, IntPtr pixelPointer)
於是便有了下面的程式碼
HImage hObject1 = new HImage();
byte* pter = pvImage.DataPointer;
hObject1.GenImage1("byte", width, height, new IntPtr(pter));
轉換成功了!!!哈哈~~
使用bitmap方法我的電腦耗時約為100ms,使用後面這種指標方法耗時約為5ms