C#联合Halcon相机实时采集
1、界面设置

2、打开相机
/// <summary>
/// 打开相机
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
HOperatorSet.GenEmptyObj(out ho_Image);
hv_AcqHandle.Dispose();
HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
-1, "false", "default", "[1] ", 0, -1, out hv_AcqHandle);
HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "grab_timeout", 5000);
HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
}
3、采集与显示
/// <summary>
/// 采集显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
//启动定时器
this.timer1.Enabled = true;
//打开窗口,控件的宽,高,句柄
HOperatorSet.OpenWindow(0, 0, this.hWindowControl1.Width, this.hWindowControl1.Height, this.hWindowControl1.HalconWindow, "visible", "", out hv_WindowHandle);
HDevWindowStack.Push(hv_WindowHandle);
}
/// <summary>
/// 定时器采集
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
//采集
ho_Image.Dispose();
HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
//为了把图片显示全
HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
if (HDevWindowStack.IsOpen())
{
using (HDevDisposeHelper dh = new HDevDisposeHelper())
{
HOperatorSet.SetPart(HDevWindowStack.GetActive(), 0, 0, hv_Height - 1, hv_Width - 1);
}
}
//显示
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
}
}
4、结果

本文档介绍了如何使用C#语言配合Halcon库来实现实时从相机捕获图像并显示。首先在界面上设置按钮,然后通过`OpenFramegrabber`打开相机,设置采集参数,并启动`GrabImageStart`进行图像采集。当点击显示按钮时,开启定时器进行图像的连续采集和显示,利用`GrabImageAsync`异步获取图像,并通过`DispObj`在窗口中展示。该过程适用于机器视觉或图像处理应用。
1341

被折叠的 条评论
为什么被折叠?



