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

1 篇文章 0 订阅

在网上搜索半天,没有找到关于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偷笑


  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值