在網(wǎng)上搜索半天,沒(méi)有找到關(guān)于Sentech相機(jī)和halcon聯(lián)合編程的例子,先將自己的代碼發(fā)布如下.
sentech相機(jī)驅(qū)動(dòng)和sdk 下載地址
參考PvPipelineSample這個(gè)例子,自己修改后就可以連接相機(jī).
SDK獲得圖像類(lèi)型是其自定義的 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);
將其轉(zhuǎn)換成為Bitmap類(lèi)型,再轉(zhuǎn)換成為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) HOperatorSet.GenEmptyObj(out ho_Image); System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); HOperatorSet.GenImageInterleaved(out ho_Image, bmpData.Scan0, "bgrx", bmp.Width, bmp.Height, -1, "byte", bmp.Width, bmp.Height, 0, 0, -1, 0);
第二種方法是使用指針,
在網(wǎng)上看到一段代碼,是如何獲取byte[]的指針
//byte[] outputData = new byte[2]; //fixed (byte* pc = outputData)
查詢(xún)相機(jī)的api,知道
byte* pter = pvImage.DataPointer;
于是聯(lián)想到halcon的gen_image1最后一個(gè)參數(shù)也是需要指針
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));
轉(zhuǎn)換成功了!!!哈哈~~
使用bitmap方法我的電腦耗時(shí)約為100ms,使用后面這種指針?lè)椒ê臅r(shí)約為5ms
|