Basler相机

这篇博客介绍了如何使用C# SDK操作Basler相机,包括设置相机参数如曝光时间和触发源,以及启动和停止图像采集。通过事件处理程序处理图像抓取,并进行图像处理。此外,还展示了如何开启和关闭相机,以及在不同场景下调整相机参数。
摘要由CSDN通过智能技术生成

Basler相机

设置相机参数

public bool SetCameraParam(string ParamType, string ParamValue)
{
    try
    {
        switch (ParamType)
        {
            case "ExposureTimeAbs":
                {
                    if (!camera.Parameters[PLCamera.ExposureTimeAbs].TrySetValue(double.Parse(ParamValue)))
                    {
                        return false;
                    }
                }
                break;
            case "TriggerSource":
                {
                    if (!camera.Parameters[PLCamera.TriggerSource].TrySetValue(ParamValue))
                    {
                        return false;
                    }
                }
                break;
            default:
                break;
        }
        return true;
    }
    catch (Exception e)
    {
        // MessageBox.Show(e.ToString());
        MachineMaster.tsk.UpdateLog(e.ToString());

        return false;
    }
}

关闭相机

public void DestroyCamera()
{
    if (camera != null)
    {
        camera.Close();
        camera.Dispose();
        camera = null;
    }
}

连接Basler相机Demo(C#版)

camera.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted;
camera.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed;
camera.StreamGrabber.GrabStopped += StreamGrabber_GrabStopped;

Basler SDK pylon6使用C#采集图像实例

连接相机

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Basler.Pylon;
using System.Windows.Forms;
using System.Drawing;
using System.IO;
using System.Diagnostics;
using System.Threading;
using HalconDotNet;

namespace Lead
{
    public class Basler_SDK_Mono
    {
        public Camera camera;
        public Bitmap bitmap;
        public Bitmap CopyBitmap;
        private int CameraIndex;

        public bool GrabFlag = false;

        // Basler.Pylon.PixelDataConverter _conveter;
        AutoResetEvent _resetEvent = new AutoResetEvent(true);
        public Basler_SDK_Mono(string CameraSN, int Camera_Index)
        {
            try
            {
                camera = new Camera(CameraSN);
                this.CameraIndex = Camera_Index;
            }
            catch
            {

            }
        }

        //打开相机
        public bool OpenCamera()
        {
            try
            {
                if (!camera.IsOpen)
                {
                    camera.Open();
                    camera.StreamGrabber.ImageGrabbed += OnImageGrabbed;
                    camera.Parameters[PLCamera.TriggerSelector].TrySetValue("FrameStart");
                    camera.Parameters[PLCamera.TriggerMode].TrySetValue("On");
                    camera.Parameters[PLCamera.TriggerSource].TrySetValue("Software");
                    camera.Parameters[PLCamera.TriggerActivation].TrySetValue("Falling Edge");
                    //camera.Parameters[PLCamera.FrameTimeoutAbs].TrySetValue(20000);
                    camera.StreamGrabber.Start(GrabStrategy.LatestImages, GrabLoop.ProvidedByStreamGrabber);
                    BitmapFactory.CreateBitmap(out bitmap, (int)camera.Parameters[PLCamera.Width].GetValue(), (int)camera.Parameters[PLCamera.Height].GetValue(), false);
                    //switch (CameraIndex)
                    //{
                    //    case 1:
                    //        {
                    //            SetCameraParam("ExposureTimeAbs", "600");
                    //        }
                    //        break;
                    //    case 2:
                    //        {
                    //            SetCameraParam("ExposureTimeAbs", "600");
                    //        }
                    //        break;
                    //    case 3:
                    //        {
                    //            SetCameraParam("ExposureTimeAbs", "600");
                    //        }
                    //        break;
                    //    default:
                    //        break;
                    //}
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        //开始采集
        public bool StartStream()
        {
            try
            {
                if (camera.IsOpen)
                {
                    camera.StreamGrabber.Start(GrabStrategy.LatestImages, GrabLoop.ProvidedByStreamGrabber);
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        public bool StopStream()
        {
            try
            {
                if (camera.StreamGrabber.IsGrabbing)
                {
                    camera.StreamGrabber.Stop(); 
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
        //抓取图像
        //object LockObj = new object();
        private void OnImageGrabbed(Object sender, ImageGrabbedEventArgs e)
        {
            try
            {
                IGrabResult grabResult = e.GrabResult;
                long ImageNo = grabResult.ImageNumber;
                if (grabResult.GrabSucceeded)
                {
                    Debug.WriteLine(grabResult.ImageNumber);
                    byte[] buffer = grabResult.PixelData as byte[];
                    BitmapFactory.UpdateBitmap(bitmap, buffer, grabResult.Width, grabResult.Height, false);
                    CopyBitmap = (Bitmap)bitmap.Clone();
                    打开图像处理线程
                    //Task RunToolBlock_1 = new Task(() => MachineMaster.Camera1_Run());
                    //Task RunToolBlock_2 = new Task(() => MachineMaster.Camera2_Run());
                    //Task RunToolBlock_3 = new Task(() => MachineMaster.Camera3_Run());
                    switch (CameraIndex)
                    {
                        case 1:
                            //离线存图
                            MachineMaster.halcon.ho_ShowImage1 = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap);
                            {
                                switch (MachineMaster.strBGside+MachineMaster.strLightNo)
                                {
                                    case "S1":
                                        if (MachineMaster.AutoRunEnable_Camera1 && MachineMaster.AutoRunFlag_Camera1)
                                        {
                                            ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };
                                            if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)
                                            {
                                                MachineMaster.LstImage_1.Add(ImageInfo);
                                            }
                                            new Action(() =>
                                            {
                                                MachineMaster.VImageProcess_1_1(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);
                                            }).BeginInvoke(null, null);
                                        }
                                        break;
                                    case "S2":
                                        if (MachineMaster.AutoRunEnable_Camera1 && MachineMaster.AutoRunFlag_Camera1)
                                        {
                                            ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };
                                            if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)
                                            {
                                                MachineMaster.LstImage_1.Add(ImageInfo);
                                            }
                                            new Action(() =>
                                            {
                                                MachineMaster.VImageProcess_1_2(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);
                                            }).BeginInvoke(null, null);
                                        }
                                        break;
                                    case "S1;2":
                                        if (MachineMaster.AutoRunEnable_Camera1 && MachineMaster.AutoRunFlag_Camera1)
                                        {
                                            ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };
                                            if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)
                                            {
                                                MachineMaster.LstImage_1.Add(ImageInfo);
                                            }
                                            new Action(() =>
                                            {
                                                //MachineMaster.VImageProcess_1_12(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);
                                            }).BeginInvoke(null, null);
                                        }
                                        break;
                                    default:
                                        break;
                                }                           
                            }
                            break;
                        case 2:
                            {
                                MachineMaster.halcon.ho_ShowImage2 = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap);
                                switch (MachineMaster.strLightNo)
                                {
                                    case "1":
                                        if (MachineMaster.AutoRunEnable_Camera2 && MachineMaster.AutoRunFlag_Camera2)
                                        {
                                            ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };
                                            if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)
                                            {
                                                MachineMaster.LstImage_1.Add(ImageInfo);
                                            }
                                            new Action(() =>
                                            {
                                               // MachineMaster.ImageProcess_2_1(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);
                                            }).BeginInvoke(null, null);
                                        }
                                        break;
                                    case "2":
                                        if (MachineMaster.AutoRunEnable_Camera2 && MachineMaster.AutoRunFlag_Camera2)
                                        {
                                            ImageInfo ImageInfo = new ImageInfo() { Image = MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), Index = ImageNo };
                                            if (MachineMaster.LstImage_1.Find(x => x.Index == ImageNo) == null)
                                            {
                                                MachineMaster.LstImage_1.Add(ImageInfo);
                                            }
                                            new Action(() =>
                                            {
                                                //MachineMaster.ImageProcess_2_2(MachineMaster.halcon.HImageConvertFromBitmap8(CopyBitmap), ImageNo);
                                            }).BeginInvoke(null, null);
                                        }
                                        break;
                                    default:
                                        break;
                                    }
                                }
                            break;
                    }

                    GrabFlag = true;
                    _resetEvent.Set();
                }
                else
                {
                    //MessageBox.Show("grabResult.NoGrabSucceeded");
                    _resetEvent.Set();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public bool StartGrab()
        {
            try
            {
                if (camera == null)
                {
                    return false;
                }

                if (!camera.IsOpen)
                {
                    return false;
                }

                int index = 1;
                while (true)
                {
                    if (index == 10)
                    {
                        throw new Exception("Fail to WaitForFrameTriggerReady!");
                    }
                    if (false == camera.WaitForFrameTriggerReady(100, TimeoutHandling.Return))
                    {
                        index++;
                        Thread.Sleep(50);
                        continue;
                    }
                    _resetEvent.Reset();
                    camera.ExecuteSoftwareTrigger();
                    _resetEvent.WaitOne();
                    break;
                }


                //if (camera.WaitForFrameTriggerReady(100, TimeoutHandling.ThrowException))
                //{
                //    _resetEvent.Reset();
                //    camera.ExecuteSoftwareTrigger();
                //    _resetEvent.WaitOne();
                //}
                if (!GrabFlag)
                {
                    Thread.Sleep(300);
                    index = 1;
                    while (true)
                    {
                        if (index == 10)
                        {
                            throw new Exception("Fail to WaitForFrameTriggerReady!");
                        }
                        if (!camera.WaitForFrameTriggerReady(1000, TimeoutHandling.Return))
                        {
                            index++;
                            Thread.Sleep(50);
                            continue;
                        }
                        _resetEvent.Reset();
                        camera.ExecuteSoftwareTrigger();
                        _resetEvent.WaitOne();
                        break;
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }


        public bool SetCameraParam(string ParamType, string ParamValue)
        {
            try
            {
                switch (ParamType)
                {
                    case "ExposureTimeAbs":
                        {
                            if (!camera.Parameters[PLCamera.ExposureTimeAbs].TrySetValue(double.Parse(ParamValue)))
                            {
                                return false;
                            }
                        }
                        break;
                    case "TriggerSource":
                        {
                            if (!camera.Parameters[PLCamera.TriggerSource].TrySetValue(ParamValue))
                            {
                                return false;
                            }
                        }
                        break;
                    default:
                        break;
                }
                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return false;
            }
        }

        //关闭相机
        public void CloseCamera()
        {
            try
            {
                if (camera == null)
                    return;

                //if (camera.StreamGrabber.IsGrabbing)
                //{
                //    camera.StreamGrabber.Stop();
                //}


                if (camera.IsOpen)
                {
                    camera.Close();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值