帧采集器连接相机,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;
        }
相关推荐
qianbo_insist11 小时前
基于图像尺寸的相机内参拼接视频
数码相机·音视频·拼接
双翌视觉1 天前
深入解析远心镜头的工作原理与选型
人工智能·数码相机·机器学习
Hi202402172 天前
如何通过选择正确的畸变模型解决相机标定难题
人工智能·数码相机·计算机视觉·自动驾驶
线束线缆组件品替网2 天前
Bulgin 防水圆形线缆在严苛环境中的工程实践
人工智能·数码相机·自动化·软件工程·智能电视
kylezhao20192 天前
工业 2D 相机与镜头选型详解
数码相机
中达瑞和-高光谱·多光谱2 天前
中达瑞和MAX-G800相机农产品品质检测中的应用
人工智能·数码相机
Hi202402173 天前
相机与激光雷达联合标定:如何选择高辨识度的参照物
数码相机·自动驾驶·雷达·相机标定·机器视觉
努力犯错3 天前
LTX-2 进阶 Prompt 技巧:从入门到专业视频创作
人工智能·数码相机·机器学习·计算机视觉·开源·prompt·音视频
qq_526099133 天前
机器视觉网卡的全面选型指南
数码相机·计算机视觉·自动化
儿歌八万首3 天前
鸿蒙自定义相机开发:Camera Kit
数码相机·华为·harmonyos·harmonyos app