VS(C#)调用Basler相机SDK采集图像及基本功能设定

您所在的位置:网站首页 巴斯勒相机软件使用 VS(C#)调用Basler相机SDK采集图像及基本功能设定

VS(C#)调用Basler相机SDK采集图像及基本功能设定

2024-07-10 20:14| 来源: 网络整理| 查看: 265

 注意一定要安装那个 巴斯勒的程序后在运行代码 ,要不然就报什么组建错误

注:博主看着另外一个博主的博客才有下面的一些总结,有兴趣可以看一下:https://blog.csdn.net/qq_39930578/article/details/87897257 

每个相机基本都有自己带的SDK 初学者看一下自己后期需要使用到什么相机就学那个列:海康、巴勒斯......前提是相机方提供的sdk里有C#的接口。

调用巴勒斯的相机使用sdk   Basler产品文档:https://zh.docs.baslerweb.com/ 通用套路:1.初始化相机   2.打开相机 3.设置配置 4.图像抓取 5.停止抓取 6.图片保存 采集相机的几种方式:1.多线程采集   2.setTime 定时器采集  3.回调函数 等等..

1.下载安装Basler程序:详情请看一下这个(前进ing 博主)写的:https://blog.csdn.net/weixin_41650642/article/details/81129978

2.安装好之后里面有对应的Basler.Pylon.dll文件需要在vs中引入这个dll文件大致路径是这样的D:\Basler\Development\Assemblies\Basler.Pylon\x64\Basler.Pylon.dll 这个是我电脑上的路径仅供 参考。

使用到了Basler的相机,利用C#编写的SDK,下面进行简单的整理记录。 首先引用basler的动态库文件,具体引用位置如下: 安装目录\Basler\pylon 5\Development\Assemblies\Basler.Pylon\x64\Basler.Pylon.dll

using System; using System.Collections.Generic; using System.Linq; using System.Text; using HalconDotNet; using Basler.Pylon; using System.Runtime.InteropServices; namespace BaslerSDK { class BaslerClass { List allCameras = null;//创建ICameraInfo对象的列表,用于保存遍历到的所有相机信息 Camera myCamera = null;//创建相机对象 HImage image = null; public BaslerClass(string sn) { } public int connectCamera(string id)//连接相机,返回-1为失败,0为成功 { string m_SerialNumber = "";//接收设备返回的序列号 allCameras = CameraFinder.Enumerate();//获取所有相机设备 for (int i = 0; i < allCameras.Count; i++) { try { if (allCameras[i][CameraInfoKey.SerialNumber] == id) { //如果当前相机信息中序列号是指定的序列号,则实例化相机类 myCamera = new Camera(allCameras[i]); myCamera.Open();//打开相机 return 0; } continue; } catch { return -1; } } return -1; } public int startCamera()//相机开始采集,返回-1为失败,0为成功 { try { myCamera.StreamGrabber.Start(); } catch { return -1; } return 0; } public int stopCamera()//停止相机采集,返回-1为失败,1为成功 { try { myCamera.StreamGrabber.Stop(); } catch { return -1; } return 0; } public int closeCamera()//关闭相机,返回-1为失败,1为成功 { try { myCamera.Close(); } catch { return -1; } return 0; } public int softTrigger()//发送软触发命令 { try { myCamera.ExecuteSoftwareTrigger(); } catch { return -1; } return 0; } public HImage ReadBuffer()//读取相机buffer并生成HImage格式的图像 { IGrabResult grabResult = myCamera.StreamGrabber.RetrieveResult(4000, TimeoutHandling.ThrowException);//读取buffer,超时时间为4000ms image = new HImage(); using (grabResult) { if (grabResult.GrabSucceeded) { if (IsMonoData(grabResult)) { //如果是黑白图像,则利用GenImage1算子生成黑白图像 byte[] buffer = grabResult.PixelData as byte[]; IntPtr p = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); image.GenImage1("byte", grabResult.Width, grabResult.Height, p); } else { if (grabResult.PixelTypeValue != PixelType.RGB8packed) { //如果图像不是RGB8格式,则将图像转换为RGB8,然后生成彩色图像 //因为GenImageInterleaved算子能够生成的图像的数据,常见的格式只有RGB8 //如果采集的图像是RGB8则不需转换,具体生成图像方法请自行测试编写。 byte[] buffer_rgb = new byte[grabResult.Width * grabResult.Height * 3]; Basler.Pylon.PixelDataConverter convert = new PixelDataConverter(); convert.OutputPixelFormat = PixelType.RGB8packed; convert.Convert(buffer_rgb, grabResult); IntPtr p = Marshal.UnsafeAddrOfPinnedArrayElement(buffer_rgb, 0); image.GenImageInterleaved(p, "rgb", grabResult.Width, grabResult.Height, 0, "byte", grabResult.Width, grabResult.Height, 0, 0, -1, 0); } } return image; } else { return null; } } } public int setExposureTime(longExposureTimeNum)//设置曝光时间us { try { myCamera.Parameters[PLCamera.ExposureTimeAbs].SetValue(ExposureTimeNum); } catch { return -1; } return 0; } public int pixelFormat(uint pixelType)//设置图像格式 { //1:Mono8 2:彩色YUV422 try { if (pixelType == 1) { myCamera.Parameters[PLCamera.PixelFormat].TrySetValue(PLCamera.PixelFormat.Mono8); } else if(pixelType == 2) { myCamera.Parameters[PLCamera.PixelFormat].TrySetValue(PLCamera.PixelFormat.YUV422Packed); } } catch { return -1; } return 0; } public int setHeight(longheight)//设置图像高度 { try { if (myCamera.Parameters[PLCamera.Height].TrySetValue()height)) return 0; else return -1; } catch { return -1; } } public int setWidth(longwidth)//设置图像宽度 { try { if (myCamera.Parameters[PLCamera.Width].TrySetValue(width)) return 0; else return -1; } catch { return -1; } } public int setOffsetX(longoffsetX)//设置图像水平偏移 { try { if (myCamera.Parameters[PLCamera.OffsetX].TrySetValue(offsetX)) return 0; else return -1; } catch { return -1; } } public int setOffsetY(longoffsetY)//设置图像竖直偏移 { try { if (myCamera.Parameters[PLCamera.OffsetY].TrySetValue(offsetY)) return 0; else return -1; } catch { return -1; } } public int setTriggerMode(uint TriggerModeNum)//设置触发模式 { //1:为On 触发模式 //0:Off 触发模式 try { if (myCamera.Parameters[PLCamera.TriggerMode].TrySetValue(TriggerModeNum==1?"On":"Off")) return 0; else return -1; } catch { return -1; } } public int closeBalanceAuto()//关闭自动白平衡 { try { myCamera.Parameters[PLCamera.BalanceWhiteAuto].TrySetValue("Off"); } catch { return -1; } return 0; } public int setTriggerSource(uint TriggerSourceNum)//设置触发源 { //直接改为软触发,此处已经写死 try { if (myCamera.Parameters[PLCamera.TriggerSource].TrySetValue("Software")) return 0; else return -1; } catch { return -1; } } private Boolean IsMonoData(IGrabResult iGrabResult)//判断图像是否为黑白格式 { switch (iGrabResult.PixelTypeValue) { case PixelType.Mono1packed: case PixelType.Mono2packed: case PixelType.Mono4packed: case PixelType.Mono8: case PixelType.Mono8signed: case PixelType.Mono10: case PixelType.Mono10p: case PixelType.Mono10packed: case PixelType.Mono12: case PixelType.Mono12p: case PixelType.Mono12packed: case PixelType.Mono16: return true; default: return false; } } } }

VS(C#)调用Basler相机SDK采集图像及基本功能设定_大_樱_桃的博客-CSDN博客_巴斯勒sdk

unity 调用大华设备视频_我有一支仙女棒的博客-CSDN博客



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3