【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

这篇具有很好参考价值的文章主要介绍了【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  由于学校要求暑期实习,于是找了一位学长开的公司,接了一个项目,是对海康威视工业相机(MV_CE200_10GM)进行二次开发,读取其图像并做分析处理。 于是花了一点时间查找的相关资料并记录一些入门要点

怎么查找资料?

  想先说说一些 “尝试授人与渔” 的话,也是自己的一点经验和体会。
  对于硬件开发,个人觉得最为重要的两点就是手册+例程(而不是疯狂地去找各种视频教程)。比如基于某一款单片机开发,肯定是需要有手册的,了解它的引脚特性和硬件资源,这种资料一般来自官网。而编程的时候,如果能有一个例程引导,会比完全按照手册去摸索强得多。
  同样,这个工业相机的二次开发也是如此:手册+例程,值得称赞的是,海康威视官网完全提供这两者,省去了开发者找资料的大量时间。因此下面简单演示一下官网资料的查找。

数据手册

  这里需要区分两个官网:海康威视【https://www.hikvision.com/cn/】海康机器人【https://www.hikrobotics.com/cn】,如下图所示。
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
  本项目中使用到的是CE系列工业相机,具体型号为MV_CE200_10GM,故要选择海康机器人官网。
  打开官网后,不要直接搜索所使用相机的型号(因为搜不到。。。),按照下图可以找到相机的型号:
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
  然后向下滚动,找到产品列表,选择对应的相机型号即可。
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
  可见其实官网给的资料还是非常丰富的,个人建议结合技术规格书(产品数据手册)将用户手册通读一遍,基本能够建立一个大致的印象,之后有什么具体的问题再来查找。

例程

  说完了数据手册,再来说说例程。值得一提的是,海康机器人还提供了一个能够显示相机画面的软件——MVS
  同样,这个软件也可以在海康机器人官网下载得到:
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

  个人觉得这个软件主要有两个作用:①配置相机,即实现相机与电脑的通信,简而言之,如果没办法在MVS中看到相机画面,那开发也就无从谈起了;②查看相机画面,方便对焦,同时设置参数,帮助开发者了解各个参数的作用(用户手册中有详细描述)。
  此外,就是MVS安装目录下的各种官方例程了,这个非常有用!首先找到MVS的快捷方式图标,然后右键,找到文件所在位置,之后回退到上一级目录,就能看到MVS安装目录的结构了,如下图所示。
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

项目开发

  找完了资料,下面就开始开发了,这里需要根据自己的需要选择使用哪种语言开发,因为官方支持的语言还是非常多的。这里选择的是VS2015 + MFC + OpenCV,选用VS还有一个好处就是,它配置OpenCV确实非常方便。
  由于开发内容过于琐碎,这里只记录一些关键点。

VS版本与OpenCV版本选择

  官方提供的demo支持的VS版本有2008,2010,2012,2015,需要根据自己的需要选择,因为VS的低版本是不兼容高版本的(网上有一些教程似乎可以破解,但比较麻烦),而且VS版本越高,安装包体积越大,可能两个版本后就double了,所以得根据自己电脑的情况和需求程度理智选择。此外就是需要考虑一下OpenCV的版本和VS版本匹配的问题,如下图所示  【附:数据来源链接
【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)
因为我电脑上之前已经安装了OpenCV4.5.1,所以这里选择了VS2015,经过试验发现是能够匹配OpenCV 4.5.1的。

这里有一点需要注意的是:建议直接去官网下载vs最新的2015 community版,不要去一些软件站下载!!!安装包大小为3G左右的最好不要用!!!因为如果安装不成功,想要完全卸载非常麻烦,不信可以去网上搜搜“VS完全卸载”,那都是泪呀。。。。

VS配置OpenCV

  相比于VS Code,VS配置OpenCV是相当地简单,关于这个也有非常多的教程,这里推荐一个比较简洁的,亲测有效。
  下面记录一些关键点:

  • 注意区分x64,x86,debug,release,用一种就贯彻到底,即所有的组件都用一种,否则VS工程就会报莫名其妙的错误。
  • 如果不想每次都配置一遍,可以在属性管理器窗口(菜单栏窗口->其他窗口)中添加一个属性(和上面一样,要注意匹配),然后双击设置,之后如果有工程需要使用到OpenCV,直接将该属性添加到工程即可。

VS添加MVS安装目录下的头文件和库

  为了能够使用相机,还需要在工程属性中包含相机相关的头文件和链接库,方法基本和上面配置VS差不多。

  • 打开官方给的demo,查看项目属性时可以发现它在包含路径处用了大量的宏定义。这是因为在安装MVS时,会在环境变量中添加很多和VS相关的项,这一点在示例程序说明文档中有相关描述,挺有意思的,但是考虑到有可能对方没有安装MVS,所以建议将需要包含的头文件和链接库复制到工程目录中,然后再添加相对路径进行引用,关于相对路径,主要是使用VS自带的路径宏定义,这一点可以参考这篇链接。
  • 同样,这里也需要考虑x86,x64的问题,因为官方给的链接库有分别提供,一定要和项目工程属性对应。

VS项目开发

  官方提供的demo中有6个MFC程序,其他的都是控制台程序,对于需要有界面显示的开发者来说还是非常方便的,即单个功能实现可以参考控制台程序,界面制作可以参考MFC程序,关于MFC的开发,可以看看我之前写的一篇博客,虽然版本不同,但基本是相通的。

编程问题记录

  由于本人不是计算机专业,所以在开发的过程中也遇到了很多代码上的问题,确实涨了不少知识,在这里简单记录一下。

相机数据如何转换为OpenCV的Mat类型?

  通过溯源头文件发现,最后相机读取到的数据类型为unsigned char *类型,因为这个相机为黑白相机,数据格式设置的是8位单通道(Moon8),即每个像素点占用一个字节,其颜色的深度从白到全黑分256个等级。因此就面临一个问题是如何将这种格式的数据转换为OpenCV中使用的类型,方便后续的处理。
  参考这个链接,发现这个问题似乎很简单,因为OpenCV的Mat类提供了一个构造函数,能够将unsigned char *类型转换为Mat类型。

函数不能修改全局指针变量?

  在编程时,我定义了一个指针类型的全局变量,用来表示设备句柄,但是发现定义的一个用来修改设备句柄的函数竟然不起作用,那个设备句柄变量始终为空指针。后来查找相关教程后发现这就是经典的无法修改实参的问题,对于这种问题,一般来说有三种解决办法  【参考链接

  • 使用变量的引用
  • 传入变量的指针
  • 将该变量作为函数的返回值

这个问题其实非常低级,但是由于这个变量类型的特殊性(指针类型),导致我找了很久的bug,所以关键还是得要理解这种问题的本质。

OpenCV运行报错“有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000006A6311F318 处”

  首先先说结论,这种问题九成是内存泄漏或内存溢出,存在很多种情况,我当时应该是在一个循环里面调用imshow函数的时候,导致读取相机数据出现内存上的问题,这种情况可以说非常特殊了,其实我也还没真正整明白它内部的原理。这里找到一个链接,比较详细地描述了出现这种报错可能的几种情况,还是非常不错的。

OpenCV的imshow函数使用

  一开始发现imshow函数显示的图片有点问题:只能显示图片的一部分,一开始以为是读取数据不全面的原因,后来发现问题出在imshow函数本身上。即如果直接调用imshow函数,其默认的窗口分辨率是固定的,如果图片超出这个分辨率范围,就只能显示一部分图像了。
  解决办法是先使用nameWindow函数建立一个可变大小的窗口,然后再调用imshow函数显示图片。

namedWindow("Display", WINDOW_NORMAL);  //建立可变大小的窗口
imshow("Display", image);
waitKey(0);

  后来在循环中调用imshow函数又发现一个问题,那就是只能显示窗口内容,而不显示图像,经过排查发现imshow函数后面没有加waitkey(0)函数。

C++实现无阻塞键盘输入

  相当于是按键检测,但不堵塞循环,非常好用

#include <conio.h> //记得包含这个头文件

if (_kbhit()) // 有按键按下:停止图像采集进程,并做好收尾工作(关闭设备并销毁句柄)
{
	int key = _getch(); // 接收按下的按键
	if (key == ' ') // 如果按下空格
	{
		process();
	}
}

此外,还可以参考这个链接,提供了两种方案实现按键检测,值得学习。

C++获取实时时间

  这个问题网上的资料非常多,不过我这个有一个特殊的需求,那就是能精确到毫秒。这里采用的是SYSTEMTIME类型的变量,需要包含头文件windows.h。具体使用方法可以参考这篇博客。文章来源地址https://www.toymoban.com/news/detail-444444.html

最后的一些题外话

  • 海康工业相机运行所需模块 - CSDN
  • 工业相机的曝光、曝光时间、快门、增益 - 腾讯云开发者社区
  • 海康工业相机使用:常见问题及解决方法
      关于网线的问题:如果电脑上的以太网卡不是千兆或者没有以太网卡(即有线网卡,因为现在大多数轻薄本都只有无线网卡,表现为没有网线接口),可以考虑上网买一个网口转USB的,一定要是千兆的(一般匹配的就是USB3.0),然后插在电脑上的USB3.0接口上,如果既没有千兆以太网卡又没有USB3.0怎么办?emmmmm,那估计只能换一种型号的相机或者换电脑了~

到了这里,关于【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (一)Qt+OpenCV调用海康工业相机SDK示例开发

    提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 近期在Qt环境下进行海康工业相机的使用开发,发现海康提供的示例没有Qt的demo,而其中有基于MFC框架的示例,所以在这

    2024年02月03日
    浏览(50)
  • 【HIKROBOT】海康机器人:工业相机SDK二次开发

    海康机器人官网链接:https://www.hikrobotics.com/cn 根据购买设备的型号下载用户说明书 笔者实验室购买了两款,一款GigE网口接口的,一款USB接口 GigE网口接口 USB接口:MV-CA050-20UC 服务支持”“下载中心”“机器视觉”中下载MVS客户端安装包及SDK开发包。 1.1.1 Ubuntu18.04系统安装 下

    2024年02月05日
    浏览(31)
  • C# 开源SDK 工业相机库 调用海康相机 大恒相机

    c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回调+信号量模式封装 ,最大程度减小线程资源,提高采图效率。 开源地址 :https://gitee.com/laomaogu/mgcamctrl 现只兼容了大恒和海康,都是常用的 其他相机,看我老板啥时候换品牌吧,或者换老板? 当然如果小伙伴感兴

    2024年04月26日
    浏览(26)
  • 机器视觉海康工业相机SDK参数设置获取

    视觉人机器视觉培训-缺陷检测项目-食品行业草鸡蛋外观检测 相机参数类型可分为六类,除 command 参数外,每一类都有其对应的设置与获取函数接口。 表 1 参数类型及对应函数接口介绍 *详细函数接口可参考 SDK 手册: ​C:Program Files (x86)MVSDevelopmentDocumentations 相机参数类型

    2024年02月07日
    浏览(72)
  • 海康工业相机SDK + OpenCV实例(4):相机参数设置详解

    前文海康工业相机SDK + OpenCV实例(3):相机初始化Bug调试讲述了相机初始化可能遇到的问题。本文讲解海康工业相机设置参数的相关接口,其中,会重点讲解 自动曝光时间调整亮度 , 图像对比度调整 。 海康SDK提供一系列参数设置的接口,本节主要讲解几个万能接口的使用,

    2024年02月11日
    浏览(41)
  • 海康机器人工业相机SDK MVS安装教程

    海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商,业务聚焦于工业物联网、智慧物流和智能制造,构建开放合作生态,为工业和物流领域用户提供服务,以创新技术持续推动智能化,引领智能制造进程。 进入官网 https://www.hikrobotics.com/cn,点击下载中心

    2024年02月10日
    浏览(30)
  • 海康工业相机SDK连接demo,Qt界面显示

    在机器视觉开发过程中,经常使用工业相机采集图像,以下采用海康机器人提供的SDK开发demo,使用语言C++,界面显示使用的Qt。SDK来自MVS 3.1版本中附属的Development文件夹。完整的项目链接地址为: 海康工业相机SDK的Demo源代码C++版本 附录海康工业相机的命名方式: 海康工业相

    2024年02月13日
    浏览(37)
  • (三)Qt+OpenCV调用海康工业相机SDK抓拍示例

    提示:这里是该系列文章的所有文章的目录 第一章: (一)Qt+OpenCV调用海康工业相机SDK示例开发 第二章: (二)Qt多线程实现海康工业相机图像实时采集 第三章: (三)Qt+OpenCV调用海康工业相机SDK抓拍示例 在这系列文章中,讲述了Qt下结合OpenCV与海康工业相机的使用,对

    2024年04月08日
    浏览(70)
  • 基于海康威视的SDK实现二次开发

    因为网上关于海康威视SDK这块的开发资源比较少,自己也是一步一步摸索过来,知道那种痛苦, 所以把自己的一些过来人的经验写出来供大家学习参考 进入海康威视官网 下载你所需要的SDK开发包(这里我就用windows来作为案列) 下载完SDK解压 里面有开发文档和SDK的动态库文

    2024年04月10日
    浏览(28)
  • 海康工业相机SDK基于C#关于IO输入输出的控制

    海康工业相机功能模块sdk提供了很多相机的接口,本文主要介绍下相机的io相关的控制。例如在通过io输入触发相机拍照。通过io输出传递拍照成功,或者存图成功的信号等。 IO输入的主要作用就是,相机通过IO管脚,收到1个IO信号,来触发相机拍照; 触发模式:TriggerMode设置

    2024年02月03日
    浏览(167)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包