4 联合编程
4 联合编程
C#连接相机
-
添加相关的VisionPro控件
- 打开vs
- 在工具箱中右键 => 选择项 => 勾选
CogAcqFifoEditV2(配置相机)、CogRecordDisplay(图片展示工具)
-
将上面添加的两个控件都拖到窗体的合适位置
-
隐藏代码中配置如下代码
// 取相工具 CogAcqFifoTool acqFifoTool = new CogAcqFifoTool(); // 窗体加载事件 private void Form1_Load(object sender, EventArgs e) { // 设置相机配置工具的工作目标为取相工具 acqFifoTool.Subject = cogAcqFifoTool1; } // 拍照按钮点击事件 private void button1_Click(object sender, EventArgs e) { // 运行取相工具 acqFifoTool.Run(); // 获取取相工具的输出图像并赋值给图像展示工具 cogRecordDisplay1.Image = acqFifoTool.OutputImage; // 自适应 cogRecordDisplay1.Fit(); } // 窗体关闭事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // 如果取相工具有相机 if (acqFifoTool.Operator != null) { // 应该将相机释放 acqFifoTool.Operator?.FrameGrabber.Disconnect(false); } }
使用ICogFrameGrabber连接相机
-
CogFrameGrabbers fgs = new CogFrameGrabbers();
获取所有图像采集设备,可迭代,有索引器 -
ICogFrameGrabber.Disconnect(false)
释放相机,应该在窗体关闭的事件中释放所有相机的连接 -
ICogAcqFifo fifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true)
创建图像采集对象,并配置相关信息- 参数1:视频格式
- 参数2:采集图像类型
- 参数3:是否自动准备
-
ICogAcqFifo.Complete
事件,图像采集完成将会触发该事件 -
ICogAcqFifo.GetFifoState(out int numPending, out int numReady, out bool busy)
获取FIFO状态,包括待处理和已准备图像数量以及是否繁忙 -
ICogAcqFifo.CompleteAcquireEx(CogAcqInfo)
获取当前采集的图像 -
ICogAcqFifo.StartAcquire()
开始进行图像采集,采集完成将会触发Complete事件 -
int ICogAcqFifo.OwnedExposureParams.Exposure
读取或这是图像采集对象的曝光度 -
double ICogAcqFifo.OwnedContrastParams.Contrast
读取或这是图像采集对象的对比度(范围0-1) -
CogRecordDisplay.StartLiveDisplay(ICogAcqFifo)
在该控件上进行实时图像采集 -
CogRecordDisplay.StopLiveDisplay()
停止实时采集
下面是一个连接相机、拍照、实时预览、设置曝光、设置对比度的示例
// 存储所有的采集设备信息 CogFrameGrabbers fgs; // 存储当前选中的采集设备信息 ICogFrameGrabber grabber; // 存储由采集设备创建的图像抓取对象 ICogAcqFifo fifo; // 窗体加载时 private void Form1_Load(object sender, EventArgs e) { // 获取所有的可用设备 fgs = new CogFrameGrabbers(); // 循环添加到下拉菜单中 foreach (ICogFrameGrabber item in fgs) { comboBox1.Items.Add(item.Name); } } // 下拉菜单选项变化时 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedIndex != -1 && fgs.Count != 0) { // 获取当前选中的采集设备信息 grabber = fgs[comboBox1.SelectedIndex]; // 创建图像采集对象,并配置 // 参数1:视频格式 // 参数2:采集图像类型 // 参数3:是否自动准备 fifo = grabber.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true); // 监听Complete事件,图像采集完成将会触发该事件 fifo.Complete += Fifo_Complete; } } private void Fifo_Complete(object sender, CogCompleteEventArgs e) { // 获取FIFO状态,包括待处理和已准备图像数量以及是否繁忙 fifo.GetFifoState(out int numPending, out int numReady, out bool busy); // 如果已准备图像数量大于0 if(numReady > 0) { // 停止实时显示 cogRecordDisplay1.StopLiveDisplay(); // 获取并显示已准备好的图像 cogRecordDisplay1.Image = fifo.CompleteAcquireEx(new CogAcqInfo()); } } private void button1_Click(object sender, EventArgs e) { if (fifo == null) return; fifo.StartAcquire(); // 开始进行图像采集,采集完成将会触发Complete事件 } private void button2_Click(object sender, EventArgs e) { // 开始实时预览 cogRecordDisplay1.StartLiveDisplay(fifo); } private void button3_Click(object sender, EventArgs e) { // 停止实时预览 cogRecordDisplay1.StopLiveDisplay(); } private void button4_Click(object sender, EventArgs e) { int bg = int.Parse(textBox1.Text); // 设置曝光 fifo.OwnedExposureParams.Exposure = bg; } private void button6_Click(object sender, EventArgs e) { double dbd = double.Parse(textBox3.Text); // 设置对比度(范围0-1) fifo.OwnedContrastParams.Contrast = dbd; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧