使用Basler相机SDK采集的显示图片

采用Basler acg-2500相机完成这次测试
首先去Basler官网下载SDK,就是那个pylon程序,里面集成了相机调试工具及SDK,自行安装。

然后使用pylon IP Configurator程序配置相机信息,主要是修改ip,使相机与电脑在同一局域网下。
在这里插入图片描述
设置好后,打开pylon Viewer程序,这是basler提供的相机调试工具,测试下相机是否正常,然后就可以开始进入VS开发了。
在这里插入图片描述
实例代码
采集效果如下:
在这里插入图片描述
添加Basler引用,复制安装目录pylon 6\Development\Assemblies\Basler.Pylon\x64路径下的Basler.Pylon.dll文件到你的项目debug目录下,并使用using Basler.Pylon;引用。

声明全局变量

List<ICameraInfo> allCameras;//存储所有相机
Camera mCamera;//相机对象

获取所有相机信息

allCameras = CameraFinder.Enumerate();

实例化相机对象

 mCamera = new Camera(allCameras[0]);

打开相机连接

 mCamera.Open();

注意:一旦打开相机连接,必须有关闭,否则相机将会连接不上,这种情况下等待几分钟后,连接对象会被系统回收,再次连接即可。

关闭相机

mCamera.Close();

取图

mCamera.StreamGrabber.Start();
IGrabResult grabResult = mCamera.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
if (grabResult.GrabSucceeded)
{
    
    
//将图像数据转换为位图
Bitmap bitmap = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
PixelDataConverter converter = new PixelDataConverter();
converter.OutputPixelFormat = PixelType.BGRA8packed;
IntPtr ptrBmp = bmpData.Scan0;
converter.Convert(ptrBmp, bmpData.Stride * bitmap.Height, grabResult);
bitmap.UnlockBits(bmpData);
//使用visionpro显示控件显示出来
cogRecordDisplay1.Image = new CogImage8Grey(bitmap);
}
else
{
    
    
Console.WriteLine("Error: {0} {1}", grabResult.ErrorCode, grabResult.ErrorDescription);
}
mCamera.StreamGrabber.Stop();

使用事件采集图像(推荐)

注册采集图像事件

mCamera.StreamGrabber.ImageGrabbed += OnImageGrabbed;

图像处理方法

public void OnImageGrabbed(Object sender, ImageGrabbedEventArgs e)
{
    
    
Console.WriteLine("采集图像处理");
IGrabResult grabResult = e.GrabResult;

if (grabResult.GrabSucceeded)
{
    
    
//转换图像数据
Bitmap bitmap = new Bitmap(grabResult.Width, grabResult.Height, PixelFormat.Format32bppRgb);
BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
PixelDataConverter converter = new PixelDataConverter();
converter.OutputPixelFormat = PixelType.BGRA8packed;
IntPtr ptrBmp = bmpData.Scan0;
converter.Convert(ptrBmp, bmpData.Stride * bitmap.Height, grabResult);
bitmap.UnlockBits(bmpData);
//visionpro控件显示图像
cogRecordDisplay1.Image = new CogImage8Grey(bitmap);
}
else
{
    
    
Console.WriteLine("Error: {0} {1}", grabResult.ErrorCode, grabResult.ErrorDescription);
}
}

采集图像方法

mCamera.StreamGrabber.Start();
IGrabResult grabResult = mCamera.StreamGrabber.RetrieveResult(5000, TimeoutHandling.ThrowException);
mCamera.StreamGrabber.Stop();

猜你喜欢

转载自blog.csdn.net/weixin_45499836/article/details/126312198