C#快速调用海康威视工业相机的SDK拍照获取图片

本文章开头会先讲一下如何找到SDK包和demo,功能的实现我会直接用平时常用的DLL以及根据海康威视给的demo封装好的常用功能类,这些都会分享到文末的链接中。

注:halcon虽然有读取相机拍照的功能,但是我认为海康应该会更懂自己家的产品,SDK做的功能会更稳定且方便使用,所有使用相机的过程中尽量多用相机厂家自带的SDK开发包。

01


第一步先在海康机器人官网下载MVS软件,安装完成后进入软件安装根目录,里面有海康准备好的各种语言的demo源码。

(1)说实话demo有点多不太清楚是哪个,我平时使用如果有疑问也是直接找海康威视的技术服务提问的,要灵活运用自己手中的资源,下面就直接讲我平时是怎么快速调用的。

2534895fe16aa40d378af8e159d25256.png

1fed65aa874b5a3e4b480b2b4f2d0e5c.png

02


我平时用的也是海康官方Demo里MvCameraControl.Net.dll,以及根据Demo的源码封装出自己常用的功能:枚举设备,打开相机,设置曝光时间,拍照获取图片,关闭相机。

(1)将MvCameraControl.Net.dll和HkCameraCltr类放入项目中,引用dll,添加类

bf7127580b21c78103098725f0e67295.png

f790bf37e9fc2bb425ad7881e08d248a.png

0c6319858b289d9bf45449420d37f896.png

2fc25aa1f9e8199780d900967e051af4.png

508eb5c6ed0ee517723895dbfe19550f.png

(2)添加成功之后直接使用这个工具类,里面封装好的函数如下,都是根据demo封装的函数

f5fe9687b4269429c44857a94c8ed7cb.png

03


继续沿用上一个文章的联合编程解决方案来实现拍照显示功能

(1)加入两个新的按钮:开启相机和拍照,代码实现如下:

74f9e44cc59bd988c947a0a07b72868a.png

这里调用了三个函数,开启相机按钮:枚举相机EnumDevices()(意思是寻找相机设备),寻找成功后会有一个返回值返回值是当前网段连接的相机数量,第二步直接开启相机OpenDevices("相机名字"),这个相机名字最为关键,需要在MVS软件里面先配置好本地与相机的IP地址为同一网段,连接进相机后寻找相机的名字,然后这个函数所需要的参数就是MVS里的这个相机名字,返回值一样是0就成功开启,第三是拍照获取图片,函数会输出hobject类型的数据,放到写好的image变量就行了,获取图片成功就跟之前显示本地图片一样,显示到窗口就完成了。

/// <summary>
        /// 开启相机按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //enumerationResult返回值如果不等于0,则为枚举成功
            int enumerationResult = HkCameraCltr.GetInstance().EnumDevices();
            if (enumerationResult != 0)
            {
                //枚举成功之后开启相机,同样cameraresults返回值为0则是开启成功
                int cameraresults = HkCameraCltr.GetInstance().OpenDevices("相机名字");
                if (cameraresults == 0)
                {
                    MessageBox.Show("相机开启成功");
                }
            }
        }
        /// <summary>
        /// 拍照按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            //拍照,返回值为0则是拍照成功
            int takepicturesrelust = HkCameraCltr.GetInstance().Capture(out image);
            //拍照成功之后,跟之前获取本地图片一样,直接将图片显示到窗口
            if (takepicturesrelust == 0)
            {
                HOperatorSet.GetImageSize(image, out HTuple Image_width, out HTuple Image_height);//获得图片尺寸
                HOperatorSet.SetPart(windowsHandle, 0, 0, Image_height - 1, Image_width - 1);
                HOperatorSet.DispObj(image, windowsHandle);
            }
        }

DEMO链接:

https://pan.baidu.com/s/1jZr-VhzKG3T5Q9GmMBfNlQ

提取码:mkj7

欢迎关注公众号: dotnet编程大全

技术群: 需要进技术群的添加小编微信mm1552923,备注:加群;

  • 17
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值