C# 使用Sentech相机sdk 获取图像,转换为halcon HImage的两种方法
2016-04-08 11:53
1221 查看
在网上搜索半天,没有找到关于Sentech相机和halcon联合编程的例子,先将自己的代码发布如下.
sentech相机驱动和sdk
下载地址
参考PvPipelineSample这个例子,自己修改后就可以连接相机.
SDK获得图像类型是其自定义的 PvBuffer
将其转换成为Bitmap类型,再转换成为HImage
第二种方法是使用指针,
在网上看到一段代码,是如何获取byte[]的指针
查询相机的api,知道
byte* pter = pvImage.DataPointer;
于是联想到halcon的gen_image1最后一个参数也是需要指针
void HImage.GenImage1(string type, int width, int height, IntPtr pixelPointer)
于是便有了下面的代码
转换成功了!!!哈哈~~
使用bitmap方法我的电脑耗时约为100ms,使用后面这种指针方法耗时约为5ms
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
相关文章推荐
- C#学习----变量和表达式
- C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
- C#读取EXCEL文件的三种经典方法
- C# List Remove 注意事项
- 创建jason,jason转换为字符串,字符串转换回jason,c#反序列化jason字符串的几个代码片段
- 第一封博客--记录从技术支持转岗c#开发
- C#基础-获得当前程序的 空间名.类名.方法名
- c# cache 缓存
- 通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系
- C# 统计代码运行时间
- c# 修饰符总结
- C#获取Session、设置Session类文件
- C# 操作excel
- 迭代器模式的一种应用场景以及C#对于迭代器的内置支持
- 一个查找替换文本的例子(C#实现)
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
- C# Async与Await的使用
- C#中部分方法返回值类型为什么只能是void?
- C#之基础数据类型和字节数组的转换
- C#基础回顾:正则表达式