由于我们的一个项目需要用到将Basler相机的曝光值进行设置,所以今天我用C#将Basler的曝光值的SDK引用了一下。
先百度了一个网上的Basler SDK的例子,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HalconDotNet;
using Basler.Pylon;
using System.Runtime.InteropServices;
using System.Windows.Forms;namespace Basler
{class BaslerSDK{List<ICameraInfo> allCameras = null;//创建ICameraInfo对象的列表,用于保存遍历到的所有相机信息Camera myCamera = null;//创建相机对象HImage image = null;public BaslerSDK(string sn){}public BaslerSDK(){ }public int connectCamera(string id)//连接相机,返回-1为失败,0为成功{string m_SerialNumber = "23176929";//接收设备返回的序列号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(Exception e){System.Console.WriteLine(e.ToString());MessageBox.Show(e.ToString());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,超时时间为4000msimage = 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(long ExposureTimeNum)//设置曝光时间us{try{myCamera.Parameters[PLCamera.ExposureTimeAbs].SetValue(ExposureTimeNum);System.Console.WriteLine("setExposureTime 1000");}catch (Exception e){System.Console.WriteLine(e.ToString());return -1;}return 0;}public int pixelFormat(uint pixelType)//设置图像格式{//1:Mono8 2:彩色YUV422try{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(long height)//设置图像高度{try{if (myCamera.Parameters[PLCamera.Height].TrySetValue(height))return 0;elsereturn -1;}catch{return -1;}}public int setWidth(long width)//设置图像宽度{try{if (myCamera.Parameters[PLCamera.Width].TrySetValue(width))return 0;elsereturn -1;}catch{return -1;}}public int setOffsetX(long offsetX)//设置图像水平偏移{try{if (myCamera.Parameters[PLCamera.OffsetX].TrySetValue(offsetX))return 0;elsereturn -1;}catch{return -1;}}public int setOffsetY(long offsetY)//设置图像竖直偏移{try{if (myCamera.Parameters[PLCamera.OffsetY].TrySetValue(offsetY))return 0;elsereturn -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;elsereturn -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;elsereturn -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;}}}
}

然后需要从网上下载一个Basler.Pylon.dll文件放入到dll目录中,C#项目需要引用到它。
C#项目的引用属于基本操作,需要熟悉起来。
比如在这里,我把BaslerSDK.cs放到了VisionGumming下面,

鼠标右键“引用”,“添加引用”,

在右下角的“浏览…”按钮可以把实际目录中的dll文件找到,并且“确定”,打上勾。
然后在界面上拉一个button,输入如下的代码:

private void button1_Click(object sender, EventArgs e)
{BaslerSDK camera = new BaslerSDK();//创建相机对象并实例化camera.connectCamera("23176929");//连接相机,传入相机序列号123456camera.startCamera();//开启相机采集camera.setExposureTime(10000);//设置曝光时间为10mscamera.softTrigger();//发送软触发采集图像HImage image = camera.ReadBuffer();//获取采集到且转换后的图像camera.stopCamera();//停止相机采集
}

上面的代码就是怎么连接相机,设置了曝光值,并且读取图像。
注意这里:

camera.connectCamera("23176929");//连接相机,传入相机序列号123456

这里我填入的是一个Basler相机的序列号,只有填入这序列号,SDK才能把余下的功能实现。
在执行下面的代码时候,

                try{if (allCameras[i][CameraInfoKey.SerialNumber] == id){//如果当前相机信息中序列号是指定的序列号,则实例化相机类myCamera = new Camera(allCameras[i]);myCamera.Open();//打开相机return 0;}continue;}catch(Exception e){System.Console.WriteLine(e.ToString());MessageBox.Show(e.ToString());return -1;}

执行myCamera.Open()一直报错,经查是因为我们这个软件已经用了halcon的C#代码来从相机捕获图像流,也就是说相机已经是打开了,所以不能再次打开,所以会报错。
当我们把halcon的相关代码去掉,这时能够Open,并且也能设置曝光值了。
好在,我的一个同事对Halcon比较熟悉,索性就用Halcon的代码把曝光值实现了。

public class ImageGrabber{private HFramegrabber _grabber;private bool _grabberSwitch;private List<IReceiveImage> _receivers;private readonly Task _tGrab;private readonly CancellationTokenSource _tGrabToken;public ImageGrabber(){_receivers = new List<IReceiveImage>();// 开启采图线程_grabberSwitch = false;_tGrabToken = new CancellationTokenSource();_tGrab = Task.Run(GrabImage, _tGrabToken.Token);   }...public void SetExposure(double value){_grabber.SetFramegrabberParam("ExposureTimeAbs", value);}

这样也能实现调整Basler相机的曝光值。

2021-10-18 Basler相机曝光值SDK的设置相关推荐

  1. Android 发布Google Play 应用市场(2021.10.18)

    准备材料 [市场注册](https://developer.android.google.cn/distribute/console) [市场登录](https://play.google.com/c ...

  2. Qt msvc使用basler 相机pylon sdk进行windows编程测试

    环境配置 官网下载pylon sdk的进行安装即可,教程很多,不细说 pro环境配置 #--------------------------------------------Basler------ ...

  3. 2021.10.18股票小计

    今天新股开盘了很是开心,可惜操作水平还是不够,一直犹豫犹豫,哈哈,在开盘没挂单,几乎挂在了最低点上,还是得吸取教训,下次就在开盘或者10分钟内卖出,还是欠果断,太犹豫哈,得改一改.新股百普赛斯开盘19 ...

  4. 游戏AI车辆(Auto Mobile City)项目开发日志(2021.10.18)

    文章目录 前言 今天实现的内容: 样条线控制的车辆AI原型 PID控制器 红绿灯系统 接下来的计划: 前言 这是一个ai车辆项目,将包含几种不同行为模式的AI车辆在城市交通场景中运行,你可以理解我我计 ...

  5. 动力煤浅析+今日交易记录 2021.10.18

    最近,在动荡的期货市场中,动力煤的跌宕起伏十分诱人.作为最开始买卖期货就选择了动荡较大的黑色系的(较为胆小的)操手小白,我也是和大家一样,对动煤同样眼馋又有些畏惧,所以我默默地了解信息,盯着动煤的走向 ...

  6. 中文书籍对《人月神话》的引用(2021.10.18更新共120本):告别失控、重构极限编程……

    <人月神话>于1975年出版,1995年出二十周年版.自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退. UMLChina摘录目前为止正式出版的软件开发各领域中文书籍中对<人 ...

  7. ubuntu16.04 basler相机 图像采集卡设置

    1.首先安装basler驱动 上网站http://www.baslerweb.com/ 根据自己的basle相机型号搜索相关驱动,下载gz包,解压该包,cd pylon-5.1.0.12682-x86 ...

  8. Basler相机外部触发硬件设置

    1.相机硬件接线图 参考链接:https://wenku.baidu.com/view/dcc580e579563c1ec4da7168.html 接线范例,下面以台达AS228T外部输出口来控制相机 ...

  9. [光源频闪] Basler相机光源频闪设置操作说明

最新文章

  1. VirtualBox在桥接模式下无网络处理
  2. java joptionpanel_JOptionPane用法--java
  3. 冷眼看移动应用商店发展:再不求变只有死路一条
  4. 提高vivado的编译速度
  5. KDT#94 为DW/BI系统建立定制工具
  6. oracle中悲观锁定_如何使用悲观锁定修复乐观锁定竞争条件
  7. 查看oracle自动优化,使用索引查询更快,优化器为何不能自动识别
  8. install python-tk_No module named _tkinter, please install the python-tk package 解决方法总结
  9. 鸿蒙轻内核的得力助手:带你掌握4种内存调试方法
  10. E - 确定比赛名次(拓补排序)
  11. 复制整个文件夹下的文件(无限递归复制子文件夹)
  12. 通过UEFI引导模式修改RAID卡jbod配置
  13. 1.学习编程从c语言开始
  14. 代码改变我的命,我要用代码改变100万女性的命
  15. 初装宽带疾如风,一抽费用逝无踪
  16. 腾达无线路由器网关和域名服务器,腾达(Tenda)路由器登录地址/网址是什么?
  17. 银行业信贷业务知识:贸易融资
  18. iOS 越狱恢复(平刷而不是升级)
  19. 小程序手机号注册php,PHP解密小程序手机号码
  20. SaaS大型医院云LIS系统源码 集齐前处理、检验、报告、质控、统计分析、两癌等模块

热门文章

  1. 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架
  2. ActiveMQ windows10 安装
  3. 融优学堂生物演化14.9
  4. 支付宝最强薅羊毛教程!
  5. 揭开正则表达式的神秘面纱
  6. 软件被人后台篡改了收款码属于入侵吗?
  7. 【集合论】等价关系 ( 等价关系概念 | 等价关系示例 | 等价关系与闭包 )
  8. Auto.js Pro安卓免ROOT引流脚本开发系列教程04微信运动点赞(1)
  9. 熊市挣秘笈计利配交易
  10. 贴片轻触开关路线难题