【Python】基于Python和Qt的海康威视相机开发

这篇具有很好参考价值的文章主要介绍了【Python】基于Python和Qt的海康威视相机开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 前期教程

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

1 前言

  此前写了一篇基于C++开发海康威视相机的博客,貌似看的人还挺多,收藏量比较高,但其实当时就知道其实海康威视相机还可以使用python开发,但当时python水平不高,也没有深入了解,趁此机会,好好总结一下用python开发的一些要点。

2 例程解析

  上面的前期教程在资料查找部分已经讲得很清楚了,这里就不再赘述。重点看一下官方提供python例程:

【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv

这个路径下,只有MvImport文件夹是需要导入的库文件,其他的都是某个功能对应的例程,前面两个BasicDemo是比较完善的例程,有图形界面。

  先随便找一个例程看看:

【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv
重点是红框中的内容,可以看到这个例程其实包含了MvCameraControl_class这个包,而这个包是在上面提到的MvImport文件夹下,所以在import前要先用append包含进这个路径。

  但是这样使用会存在一个问题,那就是如果在VS Code中开发,这样是不能通过静态检查的,也就没有了代码提示,用起来很不方便;而且从源码交互方面来说,这样要求运行这个代码的必须要有MVS环境,这个是很不优雅的。所以建议将MvImport文件夹复制到项目目录下,然后以from MvImport.MvCameraControl_class import *这样的形式来导入包,这样不仅不再需要append路径操作,而且静态检查也能通过,代码提示也有了。

  再来看看MvImport文件夹下的文件:

【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv

这里需要注意的是,如果将MvImport文件夹放到项目目录下,那么该目录下的文件在import同文件夹脚本时,要注意不能使用本文件的相对路径,而要使用项目的相对路径!! 这样才能静态检查通过。
  另外还有这个导入的dll文件,使用的是绝对路径,感觉不够优雅,而且可移植性不强,还是建议将dll文件复制到项目目录下,但是这里需要注意的是,这里实际调用的dll文件不止这一个,所以还是把整个文件夹都复制进去,所以最后项目的整体结构如下:

project_direction:
	|-- project.py
	|-- ........
	|-- MvImport
	|   |-- CameraParams_const.py
	|   |-- CameraParams_header.py
	|   |-- MvCameraControl_class.py
	|   |-- MvErrorDefine_const.py
	|   |-- PixelType_header.py
	|   |-- Win64_x64
	|   |   |-- MvCameraControl.dll
	|   |   |-- .......

然后在导入包时,所有的脚本均以项目目录为起点,以相对路径的形式导入包,这样不仅对静态检查有利,对后续导出执行程序也有很大帮助。

3 图像获取

  按照上面的步骤,配好了项目结构,接下来就是编程了。由于官方给的代码注释比较全面,这里就不再赘述了,主要是搞清楚相机的运行流程,然后按照官方给的例程和手册一步一步来就问题不大。
  这里记录一个在使用过程中遇到的问题,那就是取图部分。根据官方的手册,取图主要有两种方式,如下图所示:
【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv

分别是 MV_CC_GetOneFrameTimeout()MV_CC_GetImageBuffer()这两种方式,根据官网提供的文档,使用后者的效率更高,但是问题在于官方提供的python 例程当中,

【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv

_MV_FRAME_OUT_这个结构体下pBufAddr数据类型错了,这种表示方法使得该变量只有一个unsigned char类型,应该还需要乘上该字节的长度,但是由于相机的分辨率是可以自定义的,且不同相机型号分辨率不同,因此这里才没有设置乘数为多少。

  总之因为这个原因,如果使用 MV_CC_GetImageBuffer()这个函数来读取图像数据,只能得到一个字节,其实也就是空值。所以这里才使用MV_CC_GetOneFrameTimeout()这种方式来读取图像数据,或者修改上面的代码,但这样牵一发动全身,不好掌握。
  而且官方给出的BasicDemo例程也是基于MV_CC_GetOneFrameTimeout()来取图,所以这里建议优先采用后者,具体的使用方式建议参考BasicDemo例程。

参考链接


//更新:
貌似使用MV_CC_GetImageBuffer()也是可以正常取图的,需要使用ctypes这个包里面的一些操作,可以参考这个链接。

4 其他问题与解决办法

  • 使用网口转USB模块连接到电脑无法识别设备
    需要明确的是,网口转USB相当于是一个有线网卡,没有连接到互联网,也就不具有DHCP功能,因此需要手动给这个网卡分配一个IP地址,这个IP地址在相机看来就是电脑的IP地址,这样相机就能正常找到电脑,即电脑也能找到相机了,另外,二者的IP最好在同一网段,即第三位相同。

  • MVS中识别到相机,但运行Python程序没有识别到,报错no data, ret = 80000007
    这可能是因为防火墙的原因,不妨切换一下所连接WiFi的属性,比如公用还是专用(原来公用的换成专用,原来专用的换成公用):
    【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv
    总之最后保证python.exe公用和专用防火墙都允许,如下图所示:
    【Python】基于Python和Qt的海康威视相机开发,# Python,数码相机,python,qt,海康威视,opencv

    参考链接

5 使用到的python包

  在开发过程中,使用到很多比较“底层”的包,有点新奇,这里附上一些学习链接。文章来源地址https://www.toymoban.com/news/detail-604760.html

  • msvcrt:输入交互,参考链接
  • threading:多线程
    • Lock类详解
    • Thread类用法详解
  • ctypes:架起c/c++和python之间的桥梁
    • 官方教程
    • link1
    • link2
    • link3
    • link4

到了这里,关于【Python】基于Python和Qt的海康威视相机开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 海康威视相机SDK二次开发(JAVA语言)

    海康威视相机SDK二次开发(JAVA语言)

    前言 有个项目需要使用java程序读取海康威视的相机图片。相机通过以太网连接服务器,部署在服务器上的java程序将相机拍摄的画面保存在指定路径下。 海康威视提供了sdk开发包,可以在官网中下载,windows和linux系统都有。但是开发包中给出的示例代码,无法满足实际需要,

    2024年04月29日
    浏览(17)
  • U盘/硬盘/数码相机RAW格式文件丢失的原因|恢复方法

    在现代数字生活中,U盘、硬盘以及数码相机等设备已经成为我们储存和分享数据的主要工具。然而,当这些设备中的RAW格式文件出现丢失时,我们可能会陷入困境。面对这种情况,了解如何恢复这些RAW格式文件就变得至关重要。 一、理解RAW格式文件 RAW格式文件是一种原始数

    2024年02月12日
    浏览(10)
  • 小米12s ultra,索尼xperia1 iv,数码相机 拍照对比

    小米12s ultra,索尼xperia1 iv,数码相机 拍照对比

    首先说明所有的测试结果和拍摄数据我放到百度网盘了(地址在结尾) 我一直想知道现在的手机和相机差距有多大,到底差在哪儿? 先说结论: 1.1英寸的手机cmos(2022年) 6年前(2016)的入门款相机(m43画幅) 2.手机 不能换镜头,只能在特定的拍摄距离才能发挥出全部的实力.数码变焦画质损

    2024年02月09日
    浏览(20)
  • 【计算机视觉:算法和应用】第二章:图像形成——2.3数码相机

    【计算机视觉:算法和应用】第二章:图像形成——2.3数码相机

    2.1几何图元与变换 2.2相机辐射成像        从一个或多个光源开始,在世界中一个或多个表面反射并通过相机镜头后,光最终到达成像传感器。到达传感器的光子是如何转换为我们在数字图像上看到的数字(R,G,B)值的呢?在这一节,我们构建了一个简单的模型来解释大多数

    2024年01月19日
    浏览(17)
  • 海康威视工业相机Linux SDK开发指南详细步骤(Ubuntu20.04+单目、双目相机单次、连续拍照)

    海康威视工业相机Linux SDK开发指南详细步骤(Ubuntu20.04+单目、双目相机单次、连续拍照)

    由于实验需要使用双目相机同步采集图像,实验室准备的设备是海康威视的工业相机,对其进行二次开发,其中花了大部分时间查找资料,以及代码进行反复调试,最后到达了想要的效果,并写博客记录一下。 首先是资料的查找,我们要注意的是海康威视一共有两个官网,一

    2024年02月16日
    浏览(200)
  • 【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

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

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

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

    基于海康威视的SDK实现二次开发

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

    2024年04月10日
    浏览(10)
  • 基于海康SDK实现Python调用海康威视网络摄像头

    基于海康SDK实现Python调用海康威视网络摄像头

    本文参考博客,写得很好: Python调用海康威视网络相机之——python调用海康威视C++的SDK Python调用海康威视网络相机C++的SDK 写本文的目的,也是快速复盘,所以没有很详细 保存视频流到本地可参考下一篇:基于海康SDK实现Python保存海康威视网络摄像头拍摄的视频 Windows11 Vis

    2024年02月02日
    浏览(30)
  • Qt 基于海康相机的视频绘图

    Qt 基于海康相机的视频绘图

    需求 在视频窗口上进行绘图,包括圆,矩形,扇形等 效果 :  思路: 自己取图然后转成QImage ,再向QWidget 进行渲染,根据以往的经验,无法达到很高的帧率。因此决定使用相机SDK自带的渲染功能,也就是传一个句柄给到sdk。但是这样视频渲染出来了,向上绘制图案,会被视

    2024年02月04日
    浏览(8)
  • 海康威视监控相机的SDK与opencv调用(非工业相机)

    海康威视监控相机的SDK与opencv调用(非工业相机)

    本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C++ 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境,下载对应的SDK,需要注意的是,不要和工业相机SDK相混淆,工业相机好像是MVS是什么玩意儿,现在暂时没研究

    2024年02月04日
    浏览(21)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包