C# 使用Sentech相机sdk 获取图像,转换为halcon HImage的两种方法

在网上搜索半天,没有找到关于Sentech相机和halcon联合编程的例子,先将自己的代码发布如下.

sentech相机驱动和sdk 下载地址

参考PvPipelineSample这个例子,自己修改后就可以连接相机.

SDK获得图像类型是其自定义的 PvBuffer

  1. PvImage pvImage = lBuffer.Image;
  2. Int32 width = (Int32)pvImage.Width;
  3. Int32 height = (Int32)pvImage.Height;
  4. Bitmap bitMap = new Bitmap(width, height);
  5. pvImage.CopyToBitmap(bitMap);
  6. HObject hObject = HImageConvertFromBitmap32(bitMap);


将其转换成为Bitmap类型,再转换成为HImage

  1. </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)
  2. {
  3. HObject ho_Image;
  4. HOperatorSet.GenEmptyObj(out ho_Image);
  5. unsafe
  6. {
  7. System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
  8. unsafe
  9. {
  10. HOperatorSet.GenImageInterleaved(out ho_Image, bmpData.Scan0, "bgrx", bmp.Width, bmp.Height, -1, "byte", bmp.Width, bmp.Height, 0, 0, -1, 0);
  11. }
  12. return ho_Image;
  13. }
  14. }


第二种方法是使用指针,

在网上看到一段代码,是如何获取byte[]的指针

  1. //byte[] outputData = new byte[2];
  2. //void* p;
  3. //IntPtr ptr;
  4. //fixed (byte* pc = outputData)
  5. //{
  6. // p = (void*)pc;
  7. // ptr = new IntPtr(p);
  8. //}


查询相机的api,知道

byte* pter = pvImage.DataPointer;

于是联想到halcon的gen_image1最后一个参数也是需要指针

void HImage.GenImage1(string type, int width, int height, IntPtr pixelPointer)

于是便有了下面的代码

  1. HImage hObject1 = new HImage();
  2. byte* pter = pvImage.DataPointer;
  3. hObject1.GenImage1("byte", width, height, new IntPtr(pter));


转换成功了!!!哈哈~~

使用bitmap方法我的电脑耗时约为100ms,使用后面这种指针方法耗时约为5ms

(0)

相关推荐