帧采集器连接相机,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;
        }
相关推荐
王哈哈^_^7 小时前
YOLOv11视觉检测实战:安全距离测算全解析
人工智能·数码相机·算法·yolo·计算机视觉·目标跟踪·视觉检测
不一样的故事12611 小时前
iPhone 17 Pro Max 的评测和用户反馈
数码相机·智能手机·iphone
一只在学习的瓶子15 小时前
Camera性能
数码相机
第二层皮-合肥15 小时前
图像处理中的暗场校正
图像处理·数码相机·计算机视觉
格林威2 天前
AOI在风电行业制造领域中的应用
人工智能·数码相机·计算机视觉·视觉检测·制造·机器视觉·aoi
kyle~2 天前
机器视觉---UVC相机驱动
数码相机
代码改善世界4 天前
仓颉语言相机拍照功能实现深度解析
数码相机
杨朝为-蓝松抠图SDK4 天前
绿幕直播:绿幕怎么选择?灯光怎么布置?相机怎么设置?抠图软件怎么操作?
数码相机·无人直播·obs直播·绿幕抠图·绿幕直播·蓝松抠图·发丝级抠图
TMT星球4 天前
沙利文报告:连续8年全球第一,影石全景相机市占率升至85%
数码相机
格林威5 天前
AOI在化学药剂检测领域中的应用
人工智能·数码相机·计算机视觉·目标跟踪·视觉检测·制造·机器视觉