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

本文档记录了如何使用C#通过Basler相机SDK进行图像采集和基本功能设定。首先引用Basler.Pylon.dll动态库,然后实例化相机对象,连接相机,设置曝光时间,启动和停止相机采集,以及读取图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用到了Basler的相机,利用C#编写的SDK,下面进行简单的整理记录。
首先引用basler的动态库文件,具体引用位置如下:
安装目录\Basler\pylon 5\Development\Assemblies\Basler.Pylon\x64\Basler.Pylon.dll
在这里插入图片描述
引用命名空间
using Basler.Pylon;

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<ICameraInfo> 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 i
当使用C#调用Basler相机SDK时,您可以写一个相机库,并在其中包含触发采集的功能。下面是一个示例代码,展示了如何修改相机库以支持触发采集: ```csharp using Basler.Pylon; public class CameraLibrary { private Camera camera; private bool isTriggered = false; public void Initialize() { // 初始化相机 camera = new Camera(); camera.Open(); // 设置触发模式 camera.CameraOpened += ConfigureTriggerMode; } private void ConfigureTriggerMode(object sender, EventArgs e) { if (camera != null && camera.Parameters[PLCamera.TriggerSelector].IsWritable) { // 设置触发模式为触发 camera.Parameters[PLCamera.TriggerSelector].TrySetValue(PLCamera.TriggerSelector.FrameStart); camera.Parameters[PLCamera.TriggerMode].TrySetValue(PLCamera.TriggerMode.On); // 设置触发源为上升沿触发 camera.Parameters[PLCamera.TriggerSource].TrySetValue(PLCamera.TriggerSource.Line1); camera.Parameters[PLCamera.TriggerActivation].TrySetValue(PLCamera.TriggerActivation.RisingEdge); } } public void StartAcquisition() { // 启动图像采集 if (isTriggered) { // 仅在触发模式下启动图像采集 camera.StreamGrabber.Start(); } } public void StopAcquisition() { // 停止图像采集 camera.StreamGrabber.Stop(); } public BitmapImage CaptureImage() { // 捕获图像 if (!isTriggered) { // 如果不是触发模式,则直接采集图像 camera.StreamGrabber.Start(1, GrabStrategy.OneByOne, GrabLoop.ProvidedByStreamGrabber); } IGrabResult grabResult = camera.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException); using (grabResult) { if (grabResult.GrabSucceeded) { BitmapImage image = ConvertToBitmapImage(grabResult); return image; } else { throw new Exception("Failed to grab image"); } } } private BitmapImage ConvertToBitmapImage(IGrabResult grabResult) { // 将图像转换为BitmapImage PixelDataConverter converter = new PixelDataConverter(); converter.OutputPixelFormat = PixelType.BGRA8packed; BitmapImage image = new BitmapImage(); image.BeginInit(); image.Width = grabResult.Width; image.Height = grabResult.Height; image.StreamSource = new MemoryStream(converter.ConvertToRgb8(grabResult)); image.EndInit(); return image; } public void Close() { // 关闭相机 camera.Close(); } } ``` 在上述代码中,我们添加了一个`isTriggered`变量来标识是否处于触发模式。在初始化相机时,我们订阅了`CameraOpened`事件,并在事件处理程序中配置了触发模式。在`StartAcquisition`方法中,我们检查`isTriggered`变量,仅在触发模式下启动图像采集。如果不是触发模式,则在`CaptureImage`方法中直接采集图像。 请确保在使用相机库之前,正确初始化并配置相机,并根据您的需求设置触发模式和触发源。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值