映美精 DFK 41BG02.H分辨率 1280X960最大帧率15
采用C#编程,使用软件触发模式。触发1次,到ImageAvalible事件发生,记录其时间为96毫秒附近波动。
手动计算时间如下:
像素个数:1280 * 960= 1,228,800
RGB格式,1个像素3个Byte来表示,其字节数: 1,228,800 * 3 = 3686400
相机处理后,读出时间1000 / 15 = 66.6666 毫秒
使用千兆网连接,其理论最大速度125MB/s,按理想状态传递
3686400 / 1000 /125 = 29.49 毫秒
总耗费时间合计: 66.67 + 29.49 = 96.16 毫秒
曝光时间可调节,节约几个毫秒。
若测形状尺寸,还是选择黑白相机,传输时间节约22毫秒。
由于第1次接触机器视觉,生怕像素选择小了,结果搞个100万像素的相机。
此相机发热,用手摸,感觉有点烫手。按道理,触发模式,相机不用总是处理数据,它在发热为哪般?
C#代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TIS.Imaging;
using System.Diagnostics;
namespace 相机
{
public partial class Form1 : Form
{
ICImagingControl ic;
VCDButtonProperty SoftTrigger;
VCDPropertyItem TriggerMode;
Stopwatch s;
public Form1()
{
InitializeComponent();
//debug
s = new Stopwatch();
}
private void Form1_Load(object sender, EventArgs e)
{
//ic 初始化
initCamera();
}
private void icImagingControl1_ImageAvailable(object sender, TIS.Imaging.ICImagingControl.ImageAvailableEventArgs e)
{
//图像Ready
//停止计时
s.Stop();
//显示流逝时间
updateLabel1Delegate label1Update = new updateLabel1Delegate(updateLabel1);
this.Invoke(label1Update);
//复位计时
s.Reset();
//传递bitmap到PictureBox
pic.Image = ic.ImageActiveBuffer.Bitmap;
}
private void button1_Click(object sender, EventArgs e)
{
//捕捉按钮
//开始计时
s.Start();
//按软触发按钮
SoftTrigger.Push();
}
private void button2_Click(object sender, EventArgs e)
{
//退出按钮
ic.LiveStop();
Close();
}
//代理更新流逝时间
private delegate void updateLabel1Delegate();
private void updateLabel1()
{
label1.Text = "耗时:" + s.ElapsedMilliseconds.ToString() + "毫秒";
}
private void initCamera()
{
//初始化相机
try
{
ic = new ICImagingControl();
//Device dev = ic.Devices[0];
//设备名
ic.Device = "DFx 41BG02.H";
//视频格式
ic.VideoFormat = "BY8 (1280x960)";
//帧速率
ic.DeviceFrameRate = 15.0F;
//多线程
ic.ImageAvailableExecutionMode = EventExecutionMode.MultiThreaded;
//连续捕捉
ic.LiveCaptureContinuous = true;
//live显示
ic.LiveDisplay = false;
//触发模式
ic.DeviceTrigger = true;
//缓冲区数量
//ic.ImageActiveBuffer = 1;
//事件
ic.DeviceLost += new System.EventHandler<ICImagingControl.DeviceLostEventArgs>(deviceUnplug);
ic.ImageAvailable += new System.EventHandler<ICImagingControl.ImageAvailableEventArgs>(icImagingControl1_ImageAvailable);
//软触发
TriggerMode = ic.VCDPropertyItems.FindItem(VCDIDs.VCDID_TriggerMode);
SoftTrigger = (VCDButtonProperty)TriggerMode.Elements.FindInterface("{FDB4003C-552C-4FAA-B87B-42E888D54147}" + ":" + VCDIDs.VCDInterface_Button);
//启动流
ic.LiveStart();
}
catch (Exception)
{
MessageBox.Show("相机初始化失败。");
}
}
private void deviceUnplug(Object sender, TIS.Imaging.ICImagingControl.DeviceLostEventArgs e)
{
//相机拔出
MessageBox.Show("相机丢失。");
}
//end
}
}