大恒水星系列 USB相机开发,多相机同步采集

参考上篇文章的前半部,我们这次选择GxMutiCam项目,此项目可以同时开启多个相机

通过此项目,我们一边完成开发,一边学习

此项目下有两个窗体,其中一个是ImgShowForm.cs 用于打开单个相机的采集界面

另一个是GetMutiCam,称之为 主控程序,可以控制打开新相机

我们先通过主控程序学习如何通过一个Form打开多个Form

关键函数如下(即 点击打开设备 的函数)

/// <summary>
        /// 点击"打开设备"按钮消息响应函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void m_btn_OpenDevice_Click(object sender, EventArgs e)
        {
            string strSN = ""; //打开设备用的序列号
            try
            {
                // 判断当前连接设备个数
                if (m_listIGXDeviceInfo.Count <= 0)
                {
                    MessageBox.Show("未发现设备!");
                    return;
                }

                try
                {
                    //停止流通道、注销采集回调和关闭流
                    if (null != m_listCCamerInfo[m_nOperateID].m_objIGXStream)
                    {
                        m_listCCamerInfo[m_nOperateID].m_objIGXStream.Close();
                        m_listCCamerInfo[m_nOperateID].m_objIGXStream = null;
                    }
                }
                catch (Exception)
                {
                }


                // 如果设备已经打开则关闭,保证相机在初始化出错情况下能再次打开
                if (null != m_listCCamerInfo[m_nOperateID].m_objIGXDevice)
                {
                    m_listCCamerInfo[m_nOperateID].m_objIGXDevice.Close();
                    m_listCCamerInfo[m_nOperateID].m_objIGXDevice = null;
                }

                strSN = m_listIGXDeviceInfo[m_nOperateID].GetSN();
                IGXDevice objIGXDevice= m_objIGXFactory.OpenDeviceBySN(strSN, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
                //打开列表选中的设备
                m_listCCamerInfo[m_nOperateID].m_objIGXDevice = objIGXDevice;
                m_listCCamerInfo[m_nOperateID].m_objIGXFeatureControl = m_listCCamerInfo[m_nOperateID].m_objIGXDevice.GetRemoteFeatureControl();

                __InitParam();

                // 获取相机参数,初始化界面控件
                __InitUI();

                ImageShowFrom objImageShowFrom = new ImageShowFrom(objIGXDevice, m_nOperateID);
                objImageShowFrom.OpenDevice();
                m_listCCamerInfo[m_nOperateID].m_objImageShowFrom = objImageShowFrom;
                __SelectDeviceAndShow(m_nOperateID);

                // 更新设备打开标识
                m_listCCamerInfo[m_nOperateID].m_bIsOpen = true;

                //刷新界面
                __UpdateUI();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

打开界面的主要函数在:

可以看到,先连接到相机上,然后ImageShowFrom objImageShowFrom = new ImageShowFrom(objIGXDevice, m_nOperateID);

随后,对不同的相机绑定上不同的窗口

 /// <summary>
        /// 根据对应的设备对象绑定显示控件
        /// </summary>
        /// <param name="nCamID">相机ID</param>
        private void __SelectDeviceAndShow(int nCamID)
        {
            switch (nCamID)
            {
                case 0:
                    {
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(0, 0);
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
                    }
                    break;
                case 1:
                    {
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(390, 0);
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
                    }
                    break;
                case 2:
                    {
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(0, 330);
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
                    }
                    break;
                case 3:
                    {
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.MdiParent = this;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.StartPosition = FormStartPosition.Manual;
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Location = new Point(390,330);
                        m_listCCamerInfo[nCamID].m_objImageShowFrom.Show();
                    }
                    break;
                default:
                    break;
            }

        }

剩下的操作和单相机操作就一样了。

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用OpenCV和大恒C SDK可以轻松地采集大恒水星相机的图像。首先,需要下载和安装相应的SDK和库,并确保与相机的连接正常。接下来,可以使用OpenCV提供的函数来打开相机,并设置相应的参数,如分辨率和帧率。然后,可以通过循环不断地从相机中读取图像帧,并使用OpenCV进行图像处理和分析。 可以使用OpenCV中的cv::VideoCapture类来打开相机连接,并设置相应的参数。例如: ``` cv::VideoCapture capture; capture.open(0); // 打开相机连接 if (!capture.isOpened()) { // 相机连接失败 return -1; } capture.set(cv::CAP_PROP_FRAME_WIDTH, 1280); // 设置图像宽度 capture.set(cv::CAP_PROP_FRAME_HEIGHT, 720); // 设置图像高度 capture.set(cv::CAP_PROP_FPS, 30); // 设置帧率 ``` 然后,可以在循环中读取相机图像,并使用OpenCV函数进行处理。例如,可以使用cv::imshow函数显示图像,使用cv::imwrite保存图像,使用cv::cvtColor将图像转换为不同的颜色空间等等。 ``` cv::Mat frame; while (capture.read(frame)) { cv::imshow("Camera", frame); // 显示图像 // 进行其他的图像处理操作 int key = cv::waitKey(1); if (key == 27) { // 按下Esc键退出循环 break; } } ``` 最后,记得在程序结束时,释放相机连接和关闭窗口: ``` capture.release(); // 释放相机连接 cv::destroyAllWindows(); // 关闭窗口 ``` 以上就是使用OpenCV和大恒C SDK采集大恒水星相机图像的基本步骤。可以根据实际需求,结合OpenCV提供的丰富功能,进行图像处理、计算机视觉和图像分析等任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南七小僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值