帧采集器连接相机,Halcon连接相机

一:CogFrameGrabbers

复制代码
ICogAcqFifo myacq=null;
//抓取连接硬件的接口
CogFrameGrabbers myfgs = null;
private void LoadAcq() { 
    //初始化帧抓取器
    myfgs=new CogFrameGrabbers();
    //判断是否有连接硬件
    if (myfgs.Count > 0)
    {
        //连接相机
        foreach (ICogFrameGrabber f in myfgs)
        {
            //将抓取到的接口赋值给相机接口
            myacq = f.CreateAcqFifo("Generic GigEVision (Mono)", CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
            CameraName=f.Name;
        }
    }
    else { 
        MessageBox.Show("没有连接相机");
    }
}

使用相机接口进行连接

相机参数设置:

复制代码
myacq.OwnedExposureParams.Exposure = Convert.ToDouble(IniSave.Read("Exposure"));

myacq.OwnedBrightnessParams.Brightness = Convert.ToDouble(IniSave.Read("Brightness"));
myacq.OwnedContrastParams.Contrast = Convert.ToDouble(IniSave.Read("Contrast"));

二:Halcon连接相机

复制代码
// 连接相机
public void ConnectCamera()
{
    try
    {
        /* 1. 打开相机
         *    告诉 HALCON:我要用 GigE Vision 2.0 协议去捡一个网口相机。
         *    后面一长串参数基本都是从 HDevelop 的"助手-打开帧抓取器"里
         *    直接抄过来的,含义如下:
         *      "GigEVision2" -> 驱动名称
         *      第 2~5 个 0   -> 默认分辨率/起始行列(让相机自己报)
         *      0, 0          -> 颜色空间、相机类型默认
         *      "progressive" -> 逐行扫描
         *      -1, "default" -> 外触发默认关闭
         *      -1, "false"   -> 不自动切换参数集
         *      "default"     -> 相机描述文件用默认
         *      "34bd2038abff_Hikrobot_MVCS06010GC" -> 相机的唯一 ID(序列号)
         *      0, -1         -> 端口、超时默认
         *    执行完后,HALCON 把相机句柄塞进 hv_AcqHandle,后面所有操作都靠它。
         */
        HOperatorSet.OpenFramegrabber("GigEVision2", 0, 0, 0, 0, 0, 0, "progressive",
                                     -1, "default", -1, "false", "default",
                                     "34bd2038abff_Hikrobot_MVCS06010GC",
                                     0, -1, out hv_AcqHandle);

        /* 2. 关闭触发模式
         *    把相机设成"连续采集"(自由运行),不等待外部硬触发。
         */
        HOperatorSet.SetFramegrabberParam(hv_AcqHandle, "TriggerMode", "Off");

        /* 3. 启动采集队列
         *    让 HALCON 在后台开始预抓取 1 张图(-1=默认缓冲数),
         *    以后直接 GrabImageAsync() 就能瞬间拿到最新帧。
         */
        HOperatorSet.GrabImageStart(hv_AcqHandle, -1);

        MessageBox.Show("相机连接成功");
    }
    catch (Exception ex)
    {
        MessageBox.Show("相机连接失败");
    }
}

关闭相机

复制代码
public void CloseCamera() {
    //停止采图
    isCameraConnected = true;
    //关闭线程
    if (thread != null && thread.IsAlive) {thread.Abort(); }
        
    //关闭相机
    if (hv_AcqHandle != null)
    {
        HOperatorSet.CloseFramegrabber(hv_AcqHandle);
        //释放资源
        if (getimage != null) {getimage.Dispose(); }
        
        MessageBox.Show("相机已关闭");
        //清除窗口显示的图像
        HOperatorSet.ClearWindow(WindowID);
    }
    ShowData(DateTime.Now.ToString()+"相机已关闭\r\n");
}

实时显示:

复制代码
       private void 实时显示ToolStripMenuItem_Click(object sender, EventArgs e)
       {
           
           
           if (hv_AcqHandle == null)
           {
               MessageBox.Show("请先连接相机");
           }         
               isCameraConnected = false;
               thread = new Thread(() => {
                   while (!isCameraConnected)
                   {
                       try
                       {
                           //异步抓取图像
                           HOperatorSet.GrabImageAsync(out getimage, hv_AcqHandle, -1);
                           //获取图像大小(自适应需要)
                           HOperatorSet.GetImageSize(getimage, out HTuple width, out HTuple height);
                           //设置显示区域
                           HOperatorSet.SetPart(WindowID, 0, 0, width - 1, height - 1);
                           //显示
                           HOperatorSet.DispImage(getimage, WindowID);
                           getimage.Dispose();
                       }
                       catch (Exception ex)
                       {
                           MessageBox.Show(ex.Message);
                       }
                   }
               });
              
               thread.IsBackground = true;
               thread.Start();
           }

拍照:

复制代码
private HObject outimage;
private void 拍照ToolStripMenuItem_Click(object sender, EventArgs e)
{
   
    if (hv_AcqHandle == null)
    {
        MessageBox.Show("请先连接相机");
        return;
    }
    
            try
            {
                //停止实时显示
                isCameraConnected = true;
                //等待线程释放句柄
                Thread.Sleep(100);
                //异步抓取图像
                HOperatorSet.GrabImageAsync(out outimage, hv_AcqHandle, -1);
                //获取图像大小(自适应需要)
                HOperatorSet.GetImageSize(outimage, out HTuple width, out HTuple height);
                //设置显示区域
                HOperatorSet.SetPart(WindowID, 0, 0, width - 1, height - 1);
                //显示
                HOperatorSet.DispImage(outimage, WindowID);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            //拍完照之后,继续实时显示
            isCameraConnected = false;
        }
相关推荐
格林威9 小时前
工业视觉项目:如何与客户有效沟通验收标准?
人工智能·数码相机·计算机视觉·视觉检测·机器视觉·工业相机·视觉项目
科研前沿16 小时前
什么是时空融合技术?
大数据·人工智能·数码相机·算法·重构·空间计算
格林威18 小时前
工业视觉检测:提供可视化UI调试工具的实现方式是什么?
开发语言·人工智能·数码相机·ui·计算机视觉·视觉检测·工业相机
sali-tec20 小时前
C# 基于OpenCv的视觉工作流-章58-相机标定
图像处理·人工智能·数码相机·opencv·算法·计算机视觉
轻口味2 天前
HarmonyOS 6 轻相机应用开发5:实时自动戴眼镜功能实现
数码相机·华为·harmonyos
YANQ6622 天前
3.gemini336相机在ubuntu22.04的ros2下运行
数码相机
山楂树の2 天前
原生 WebGL + Canvas 实现鱼眼图像去畸变(Shader逐像素计算)
图像处理·数码相机·学习·程序人生
蓉蓉的数码视界3 天前
【无标题】
数码相机
科研前沿3 天前
镜像视界浙江科技有限公司的核心引擎关键技术有哪些?
人工智能·数码相机·计算机视觉
ZPC82103 天前
工业机器人视觉引导焊缝定位
数码相机