帮人做网站赚钱吗,网站建设工作总结培训,网络优化2年工资有多少,多个域名指向同一个网站文章目录 0 前期教程1 前言2 例程解析3 图像获取4 其他问题与解决办法5 使用到的python包 0 前期教程
【项目实践】海康威视工业相机SDK开发小白版入门教程#xff08;VS2015OpenCV4.5.1#xff09;
1 前言 此前写了一篇基于C开发海康威视相机的博客#xff0c;貌似看的人… 文章目录 0 前期教程1 前言2 例程解析3 图像获取4 其他问题与解决办法5 使用到的python包 0 前期教程
【项目实践】海康威视工业相机SDK开发小白版入门教程VS2015OpenCV4.5.1
1 前言 此前写了一篇基于C开发海康威视相机的博客貌似看的人还挺多收藏量比较高但其实当时就知道其实海康威视相机还可以使用python开发但当时python水平不高也没有深入了解趁此机会好好总结一下用python开发的一些要点。
2 例程解析 上面的前期教程在资料查找部分已经讲得很清楚了这里就不再赘述。重点看一下官方提供python例程 这个路径下只有MvImport文件夹是需要导入的库文件其他的都是某个功能对应的例程前面两个BasicDemo是比较完善的例程有图形界面。 先随便找一个例程看看 重点是红框中的内容可以看到这个例程其实包含了MvCameraControl_class这个包而这个包是在上面提到的MvImport文件夹下所以在import前要先用append包含进这个路径。 但是这样使用会存在一个问题那就是如果在VS Code中开发这样是不能通过静态检查的也就没有了代码提示用起来很不方便而且从源码交互方面来说这样要求运行这个代码的必须要有MVS环境这个是很不优雅的。所以建议将MvImport文件夹复制到项目目录下然后以from MvImport.MvCameraControl_class import *这样的形式来导入包这样不仅不再需要append路径操作而且静态检查也能通过代码提示也有了。 再来看看MvImport文件夹下的文件 这里需要注意的是如果将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 图像获取 按照上面的步骤配好了项目结构接下来就是编程了。由于官方给的代码注释比较全面这里就不再赘述了主要是搞清楚相机的运行流程然后按照官方给的例程和手册一步一步来就问题不大。 这里记录一个在使用过程中遇到的问题那就是取图部分。根据官方的手册取图主要有两种方式如下图所示
分别是 MV_CC_GetOneFrameTimeout()和 MV_CC_GetImageBuffer()这两种方式根据官网提供的文档使用后者的效率更高但是问题在于官方提供的python 例程当中 _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.exe公用和专用防火墙都允许如下图所示 参考链接
5 使用到的python包 在开发过程中使用到很多比较“底层”的包有点新奇这里附上一些学习链接。
msvcrt输入交互参考链接threading多线程 Lock类详解Thread类用法详解 ctypes架起c/c和python之间的桥梁 官方教程link1link2link3link4