大恒工业相机C#语言winform平台开发例程

链接:pan.baidu.com/s/1xq-xNpY6rWxpIddX345PYw?
提取码:dhxa
本例程大恒水星系列(MER、MER2、ME2P),火星(MARS)均可适用

在这里插入图片描述

这四个例程为自己二次分装,非自带例程,而且非常简洁
采集到的图像返回为bitmap格式图像,显示在picturebox中

首先新建一个winform项目,调用Galaxy Viewer中的C#dll
在这里插入图片描述
再进行引用

using GxIAPINET;

例程一、连续采集,返回bitmap格式图像

在这里插入图片描述
自由采集例程直接调用本例程中的DHcamera文件,改为自己项目的命名空间,可以直接调用在这里插入图片描述

        int m_CamNum = 0;
        DhCamera m_Cam = new DhCamera();                           //声明一个相机类对象数组
        private void Open_Click(object sender, EventArgs e)
        {
            if(m_CamNum>0)
            if (!m_Cam.CamOpen())
                m_Cam.OpenCameraFunc(0, ShowImage);                      
        }
        private void Close_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.CloseCameraFunc();                        
        }

        private void Start_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StartAcqFunc();
        }
        private void Stop_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StopAcqFunc();
        }
        public void ShowImage(int index, Bitmap objdata)
        {
            if (!m_Cam.m_bIsColor)
            {
                //添加调色板
                ColorPalette palette;
                palette = objdata.Palette;
                int i = 0;
                for (i = 0; i <= 255; i++)
                {
                    palette.Entries[i] = System.Drawing.Color.FromArgb(i, i, i);
                }
                objdata.Palette = palette;

            }
            //BitmapImage objdataImage = BitmapToBitmapImage(objdata);       
            Action action1 = () =>
            {
                pictureBox1.Image = objdata;
            };
            pictureBox1.BeginInvoke(action1);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DhCamera.initlib();
            m_CamNum = DhCamera.GetCamNumFunc(); //获取识别到的相机数量
            if (m_CamNum > 0)
                textBox1.Text = m_Cam.GetInfo(0); //第一个相机的id
            else
                textBox1.Text = "未识别到相机";
        }

例程二、软触发采集,返回bitmap格式图像

在这里插入图片描述
同样直接调用本例程中的DHcamera文件,改为自己项目的命名空间,可以直接调用

		int m_CamNum = 0;
        DhCamera m_Cam = new DhCamera();                           //声明一个相机类对象数组
        public Form1()
        {
            InitializeComponent();
        }
        private void Open_Click(object sender, EventArgs e)
        {
            if (m_CamNum > 0)
                if (!m_Cam.CamOpen())
                    m_Cam.OpenCameraFunc(0, ShowImage);

        }
        private void Close_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.CloseCameraFunc();
        }

        private void Start_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StartAcqFunc();
        }
        private void Stop_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StopAcqFunc();
        }
        public void ShowImage(int index, Bitmap objdata)
        {
            if (!m_Cam.m_bIsColor)
            {
                //添加调色板
                ColorPalette palette;
                palette = objdata.Palette;
                int i = 0;
                for (i = 0; i <= 255; i++)
                {
                    palette.Entries[i] = System.Drawing.Color.FromArgb(i, i, i);
                }
                objdata.Palette = palette;

            }
            //BitmapImage objdataImage = BitmapToBitmapImage(objdata);       
            Action action1 = () =>
            {
                pictureBox1.Image = objdata;
            };
            pictureBox1.BeginInvoke(action1);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DhCamera.initlib();
            m_CamNum = DhCamera.GetCamNumFunc(); //获取识别到的相机数量
            if (m_CamNum > 0)
                textBox1.Text = m_Cam.GetInfo(0); //第一个相机的id
            else
                textBox1.Text = "未识别到相机";
        }
        private void Trigger_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.SoftTriggerCommand();
        }

例程三、硬触发采集,返回bitmap格式图像

同样直接调用本例程中的DHcamera文件,改为自己项目的命名空间,可以直接调用
需要注意的是,大恒水星系列相机和火星系列相机可以作为触发的IO有3组,分别是line0、line2、line3
如果想更改触发接口需要更改DHcamera.cs文件中的146行参数,将line0改为line2或者line3。
如果想通过相机输出GPIO信号,参考这个大恒水星火星工业相机GPIO输入输出

//打开触发模式
 m_objIGXFeatureControl.GetEnumFeature("TriggerMode").SetValue("On");
  //也可以使用Line2,Line3
 m_objIGXFeatureControl.GetEnumFeature("TriggerSource").SetValue("Line0");
 		int m_CamNum = 0;
        DhCamera m_Cam = new DhCamera();                           //声明一个相机类对象数组
        private void Open_Click(object sender, EventArgs e)
        {
            if(m_CamNum>0)
            if (!m_Cam.CamOpen())
                m_Cam.OpenCameraFunc(0, ShowImage);                     
        }
        private void Close_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.CloseCameraFunc();                        
        }

        private void Start_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StartAcqFunc();
        }
        private void Stop_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StopAcqFunc();
        }
        public void ShowImage(int index, Bitmap objdata)
        {
            if (!m_Cam.m_bIsColor)
            {
                //添加调色板
                ColorPalette palette;
                palette = objdata.Palette;
                int i = 0;
                for (i = 0; i <= 255; i++)
                {
                    palette.Entries[i] = System.Drawing.Color.FromArgb(i, i, i);
                }
                objdata.Palette = palette;

            }
            //BitmapImage objdataImage = BitmapToBitmapImage(objdata);       
            Action action1 = () =>
            {
                pictureBox1.Image = objdata;
            };
            pictureBox1.BeginInvoke(action1);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DhCamera.initlib();
            m_CamNum = DhCamera.GetCamNumFunc(); //获取识别到的相机数量
            if (m_CamNum > 0)
                textBox1.Text = m_Cam.GetInfo(0); //第一个相机的id
            else
                textBox1.Text = "未识别到相机";
        }

例程四、作为TCP客户端接收字符串“1”触发采集

在这里插入图片描述

字符串可以根据自己需要的协议进行更改

 		private void SetText(string text)
        {
            if(text == "1")//根据需要将“1”改为其他接收的字符串
                if (m_Cam.CamOpen())
                    m_Cam.SoftTriggerCommand();
        }
		IPAddress HostIP;
        IPEndPoint point;
        Socket socket;
        bool flag = true;
        string IP = "192.168.1.105";
        string IPort = "50123";
        int i;

        int m_CamNum = 0;
        DhCamera m_Cam = new DhCamera();                           //声明一个相机类对象数组
        private void Open_Click(object sender, EventArgs e)
        {
            if (m_CamNum > 0)
                if (!m_Cam.CamOpen())
                    m_Cam.OpenCameraFunc(0, ShowImage);
        }
        private void Close_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.CloseCameraFunc();
        }

        private void Start_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StartAcqFunc();
        }
        private void Stop_Click(object sender, EventArgs e)
        {
            if (m_Cam.CamOpen())
                m_Cam.StopAcqFunc();
        }
        public void ShowImage(int index, Bitmap objdata)
        {
            if (!m_Cam.m_bIsColor)
            {
                //添加调色板
                ColorPalette palette;
                palette = objdata.Palette;
                int i = 0;
                for (i = 0; i <= 255; i++)
                {
                    palette.Entries[i] = System.Drawing.Color.FromArgb(i, i, i);
                }
                objdata.Palette = palette;
            }
            //BitmapImage objdataImage = BitmapToBitmapImage(objdata);       
            Action action1 = () =>
            {
                pictureBox1.Image = objdata;
            };
            pictureBox1.BeginInvoke(action1);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            DhCamera.initlib();
            m_CamNum = DhCamera.GetCamNumFunc(); //获取识别到的相机数量
            if (m_CamNum > 0)
                textBox1.Text = m_Cam.GetInfo(0); //第一个相机的id
            else
                textBox1.Text = "未识别到相机";
        }
        private void Trigger_Click(object sender, EventArgs e)
        {
            try
            {
                HostIP = IPAddress.Parse(IP);              //获取Ip
                point = new IPEndPoint(HostIP, Int32.Parse(IPort));   //将网络端点表示为IP地址和端口号
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //使用Socket的构造函数实例化一个Socket对象,以遍连接远程主机
                socket.Connect(point);   //调用Connect方法连接远程主机
                Thread thread = new Thread(new ThreadStart(Proccess));
                thread.Start();
            }
            catch
            {      
            }
        }
        private void SetText(string text)
        {
            if(text == "1")
                if (m_Cam.CamOpen())
                    m_Cam.SoftTriggerCommand();
        }
        private void Proccess()
        {
            if (socket.Connected)
            {
                while (flag)
                {
                    byte[] receiveByte = new byte[64];
                    int r = socket.Receive(receiveByte, receiveByte.Length, 0);
                    string strInfo = Encoding.UTF8.GetString(receiveByte,0,r);
                    this.Invoke(new SetTextCallback(SetText), new object[] { strInfo });
                }
            }
        }
        delegate void SetTextCallback(string text);
<think>好的,我现在需要回答用户关于相机硬触发配置和实现方法的问题。首先,我应该回顾用户提供的引用资料,特别是引用[4],因为里面提到了外触发模式的尝试。用户的问题集中在硬触发,也就是硬件触发,通常涉及外部信号触发相机采集图像。 首先,我需要确定硬触发的基本概念,可能涉及到触发信号的类型(如TTL)、接线方式以及软件配置。根据引用[4],用户提到外触发模式需要连接特定的线路,比如line2和line3,这可能对应相机接口的特定针脚。因此,硬件连接部分需要明确如何正确接线,比如使用开发板生成触发信号,并通过线缆连接到相机的相应引脚。 接下来是软件配置部分。引用[3]提到QT项目中使用相机,通过设置相机参数来控制采集。因此,在软件中可能需要调用相机的SDK接口,设置触发模式为外部触发,并配置触发源、触发极性等参数。例如,可能需要使用类似SetTriggerMode的函数,将模式从连续采集改为外部触发。 另外,引用[2]提到初始化相机的代码,比如IGXFactory::GetInstance().Init(),这在配置触发前必须正确执行。软件流程可能包括初始化、打开相机、设置触发模式、启动采集等步骤。用户可能需要通过SDK提供的API来调整这些参数,确保相机在接收到外部信号时开始采集图像。 还需要考虑触发信号的稳定性和同步问题。例如,触发信号的电压、频率是否符合相机的要求,是否可能导致误触发或漏触发。引用[4]提到电路线制作,可能需要确保线路连接正确,避免干扰,同时可能需要配置触发延迟或去抖参数。 用户可能遇到的常见问题包括触发不响应、图像采集不同步等,需要检查硬件连接是否正确,软件参数是否设置正确,以及触发信号是否稳定。此外,引用[1]提到项目优化了图像处理效率,可能在硬触发配置后需要考虑图像传输和处理的实时性。 最后,生成相关问题时要围绕硬件连接、软件配置、同步优化、应用场景等方面展开,帮助用户进一步理解相关技术点。</think>### 相机硬触发配置与实现方法 #### 硬件配置 1. **触发信号电路连接** - 根据相机接口定义(如水星系列USB3.0接口),需将外部触发信号线(如开发板的TTL脉冲输出)连接到相机的特定引脚。例如,引用[4]提到连接`Line2`和`Line3`线路,其中`Line2`通常为触发信号输入,`Line3`可能为接地或同步信号。 - 接线示例: - 开发板触发信号输出端 → 相机`Line2` - 开发板接地端 → 相机`Line3`(或其他接地引脚) - 注意触发信号的电压范围(如3.3V/5V)需与相机规格匹配,避免损坏设备[^4]。 2. **触发模式选择** - 支持硬触发的模式通常包括`外触发上升沿`、`外触发下降沿`或`电平触发`。需根据实际需求选择触发极性(高电平有效或低电平有效)[^4]。 --- #### 软件配置(基于QT/C++ SDK) 1. **初始化相机库** 在操作前需调用初始化函数,确保SDK环境就绪: ```cpp IGXFactory::GetInstance().Init(); // 仅需执行一次[^2] ``` 2. **设置触发模式** - 打开相机后,通过SDK接口配置触发参数: ```cpp // 获取相机控制接口 CCommandPtr pCmdTriggerMode = m_objDevicePtr->GetRemoteFeature("TriggerMode"); pCmdTriggerMode->SetValue("On"); // 启用触发模式 // 设置触发源为外触发 CCommandPtr pCmdTriggerSource = m_objDevicePtr->GetRemoteFeature("TriggerSource"); pCmdTriggerSource->SetValue("Line2"); // 对应硬件连接的触发引脚 // 设置触发极性(如上升沿触发) CCommandPtr pCmdTriggerActivation = m_objDevicePtr->GetRemoteFeature("TriggerActivation"); pCmdTriggerActivation->SetValue("RisingEdge"); ``` 3. **启动采集与回调处理** - 开始采集后,相机将在接收到外部触发信号时捕获图像: ```cpp m_objStreamPtr->StartGrabbing(); // 启动采集 // 注册回调函数处理图像 m_objStreamPtr->RegisterCaptureCallback(this, &MyCameraClass::OnFrameCallback); ``` --- #### 关键注意事项 1. **信号稳定性** 确保触发信号无抖动,必要时在开发板或相机端配置去抖滤波(如设置`TriggerDebouncer`参数)。 2. **同步性优化** 若需多相机同步,需确保所有相机的触发信号来自同一源,并通过`TriggerDelay`参数微调时序[^1]。 3. **实时性保障** 采用Release模式编译并关闭调试输出,减少图像处理延迟(参考引用[1]的性能优化策略)[^1]。 ---
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

未来超低端科技研究所

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

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

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

打赏作者

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

抵扣说明:

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

余额充值