采用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();