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);
}
}
}
}