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

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

01

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

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

opencv 打开海康安防相机 海康相机sdk_python

opencv 打开海康安防相机 海康相机sdk_opencv 打开海康安防相机_02

02

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

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

opencv 打开海康安防相机 海康相机sdk_python_03

opencv 打开海康安防相机 海康相机sdk_java_04

opencv 打开海康安防相机 海康相机sdk_java_05

opencv 打开海康安防相机 海康相机sdk_python_06

opencv 打开海康安防相机 海康相机sdk_python_07

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

opencv 打开海康安防相机 海康相机sdk_android_08

03

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

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

opencv 打开海康安防相机 海康相机sdk_python_09

这里调用了三个函数,开启相机按钮:枚举相机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