本文主要是介绍使用C#实现AVT相机取像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、环境部署
二、取像实现
1、连接相机
2、参数的修改
3、软触发取像
一、环境部署
下载Vimba SDK 地址:Vimba SDK - Allied Vision;
下载好后安装该安装包,其.net的SDK会放置在该路径下:
根据需要,引用X86或者X64的 VimbaNET.dll。
二、取像实现
1、连接相机
var sys = sys AVT.VmbAPINET.Vimba();
sys.Startup();
var camera = sys.OpenCameraByID("相机IP",VmbAccessModeType.VmbAccessModeFull);
2、参数的读取和修改
AVT相机参数的读取和修改,以及执行指令是通过索引 AVT.VmbAPINET.CameraFeatures 字典来实现的,其机制类似 Dictionary<string,Object> ,以键来索引特定的参数和指令。
读取和修改相机的曝光值:
// 读取曝光
// ExposureTimeAbs 是曝光的键
double GetExposure() => camera.Features["ExposureTimeAbs"].FloatValue;// 设置曝光
void SetExposure(double value) => camera.Features["ExposureTimeAbs"].FloatValue = value;
执行软触发指令:
camera.Features["TriggerSoftware"].RunCommand();
3、软触发取像
AVT的SDK的图像数据通过 AVT.VmbAPINET.Frame 来存储。
var frame = new Frame(camera.Features["PayloadSize"].IntValue);// 注册码流接收事件
camera.OnFrameReceived += new AVT.VmbAPINET.Camera.OnFrameReceivedHandler(OnFrameReceived);
相机码流接收 OnFrameReceived:
private void OnFrameReceived(Frame frame)
{camera.QueueFrame(frame)waitTriggerResult.Set();
}
waitTriggerResult 是一个System.Threading.AutoResetEvent类型,具体作用可以百度了解,在此就不做说明了。
var waitTriggerResult = new System.Threading.AutoResetEvent(false);
执行软触发,并将获取到的图像转换为Bitmap类型:
camera.Features["AcquisitionMode"].EnumValue = "SingleFrame"; //将采集图像的模式设置为单帧
camera.StartCapture(); // 启动码流camera.Features["AcquisitionStart"].RunCommand(); // 执行开始采集指令
camera.Features["TriggerSoftware"].RunCommand(); // 执行一次软触发// 等待3秒,如三秒后没接受到图像,则无图像返回
if (waitTriggerResult.WaitOne(3000))Bitmap bitmap = ConvertFrameToBitmap(frame);
图像转换函数 ConvertFrameToBitmap:
Bitmap ConvertFrameToBitmap(Frame inputFrame){int width = Convert.ToInt32(inputFrame.Width);int height = Convert.ToInt32(inputFrame.Height);Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format24bppRgb);inputFrame.Fill(ref bitmap);return bitmap;
}
这篇关于使用C#实现AVT相机取像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!