帧采集器连接相机,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;
        }
相关推荐
Tel1992530800411 小时前
高速相机触发脉冲计数器信号采集模块 4倍频 5Mhz 的高速脉冲进行计数
数码相机·物联网·3dsmax·工业自动化·仪器仪表·工控设备
qq_5260991315 小时前
稳定耐用工业图像采集卡 | 宽温工作环境,适配恶劣工业场景
数码相机
思维新观察16 小时前
理光 GR IV HDF 版发布:用喷墨技术重构光影质感
数码相机
春日见21 小时前
如何跑通,吃透一个开源项目?
linux·运维·开发语言·数码相机·matlab
博图光电1 天前
当常规视觉 “束手无策”,BTIR 短波红外相机开启 “穿透式” 成像革命
数码相机
Tel199253080042 天前
CCD相机同步外触发拍照抓拍识别高速脉冲计数器信号采集模块
单片机·数码相机·物联网·自动化·工业自动化·仪器仪表
TTGGGFF2 天前
具身智能:零基础入门睿尔曼机械臂(六)——手眼标定代码库详解,从原理到实践
数码相机·机械臂·具身智能
SPFFC189380330532 天前
抗干扰磁环排线 | Magnetic Ring Flat Cable - 高磁导率EMI抑制解决方案
服务器·数码相机·车载系统·机器人·音频·智能音箱·智能电视
carver w2 天前
轮询和回调 --SDK
数码相机
字节数据平台2 天前
6000字技术向拆解 “大晓机器人”携手火山引擎多模态数据湖探索视频处理新路径
人工智能·数码相机