图像采集

源码https://github.com/SICHENGJ/HK_Camera

主动取流流程

回调出流流程图

手册上是通过C语言实现的:

海康调用C语言的动态链接库实现的python库


这些库文件在海康威视的MVS软件安装包里面,找一找就能找到。

本次实现了主动取流

  1. 通过MV_CC_EnumDevices(MV_USB_DEVICE, device_list)搜索存在的USB设备。

  2. 获取设备信息cast(device_list.pDeviceInfo[int(show_device_num)], POINTER(MV_CC_DEVICE_INFO)).contents

  3. 创建句柄cam = MvCamera()

  4. 获得设备的句柄cam.MV_CC_CreateHandle(device_info)

  5. 打开设备cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)

  6. 获得设备的参数存在MVCC_INTVALUE()这个结构里面,cam.MV_CC_GetIntValue(“PayloadSize”, camera_int_param)

  7. 获取图片的存储大小,还有长度

    image_data_size = (c_ubyte * camera_int_param.nCurValue)()image_data_length = camera_int_param.nCurValue
    
  8. 开始抓流

    grab_ret = cam.MV_CC_StartGrabbing()
    
  9. 图片信息存在下面的结构中

    frame_info = MV_FRAME_OUT_INFO_EX()
    memset(byref(frame_info), 0, sizeof(frame_info))
    
  10. 获取流

    cam.MV_CC_GetOneFrameTimeout(image_data_size, image_data_length, frame_info, 1000)
    
  11. 将图片格式转一转

                nRGBSize = frame_info.nWidth * frame_info.nHeightconvert_param = MV_CC_PIXEL_CONVERT_PARAM()memset(byref(convert_param), 0, sizeof(convert_param))convert_param.nWidth = frame_info.nWidthconvert_param.nHeight = frame_info.nHeightconvert_param.pSrcData = image_data_sizeconvert_param.nSrcDataLen = frame_info.nFrameLenconvert_param.enSrcPixelType = frame_info.enPixelTypeconvert_param.enDstPixelType = frame_info.enPixelTypeconvert_param.pDstBuffer = (c_ubyte * nRGBSize)()convert_param.nDstBufferSize = nRGBSizeret = cam.MV_CC_ConvertPixelType(convert_param)
    
  12. img_buff = (c_ubyte * convert_param.nDstLen)()
    cdll.msvcrt.memcpy(byref(img_buff), convert_param.pDstBuffer, convert_param.nDstLen)
    img = np.array(img_buff, dtype=np.int8)
    Img = img.reshape(1024, 1280)
    Img = cv.flip(Img, -1)
    Img = cv.flip(Img, -1)
    
  13. 整体代码如下:

# _*_coding:UTF-8_*_
# 当前系统用户: LISICHENG
# 当前系统日期:2019/7/29
# 当前系统时间:13:55
# 创建文件的IDE名称:PyCharm
import cv2 as cv
import numpy as np
from MvImport.CameraParams_const import *
from MvImport.CameraParams_header import *
from MvImport.MvCameraControl_header import *
from MvImport.MvCameraControl_class import *
from MvImport.MvErrorDefine_const import *
from MvImport.PixelType_const import *
from MvImport.PixelType_header import *class AccessToImages():def FindDevices(self):device_list = MV_CC_DEVICE_INFO_LIST()find_device_ret = MvCamera.MV_CC_EnumDevices(MV_USB_DEVICE, device_list)if find_device_ret == 0:return device_listelse:return Falsedef GetImages(self, show_device_num, device_list):i = 0if show_device_num <= device_list.nDeviceNum:device_info = cast(device_list.pDeviceInfo[int(show_device_num)], POINTER(MV_CC_DEVICE_INFO)).contentscam = MvCamera()handle_ret = cam.MV_CC_CreateHandle(device_info)if handle_ret != 0:print("创建句柄失败")# 打开设备open_device = cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)if open_device != 0:print('开启失败')# 获取相机int型节点值  "PayloadSize" 为当前节点得名称,一帧节点的大小camera_int_param = MVCC_INTVALUE()int_value_ret = cam.MV_CC_GetIntValue("PayloadSize", camera_int_param)if int_value_ret != 0:print('获取图像信息失败')image_data_size = (c_ubyte * camera_int_param.nCurValue)()image_data_length = camera_int_param.nCurValue# 开始抓流grab_ret = cam.MV_CC_StartGrabbing()if grab_ret != 0:print('抓起流失败')# 获取数据大小# 下面将获得每一帧的图像while True:frame_info = MV_FRAME_OUT_INFO_EX()memset(byref(frame_info), 0, sizeof(frame_info))frame_ret = cam.MV_CC_GetOneFrameTimeout(image_data_size, image_data_length, frame_info, 1000)if frame_ret != 0:print('获取帧信息失败')nRGBSize = frame_info.nWidth * frame_info.nHeightconvert_param = MV_CC_PIXEL_CONVERT_PARAM()memset(byref(convert_param), 0, sizeof(convert_param))convert_param.nWidth = frame_info.nWidthconvert_param.nHeight = frame_info.nHeightconvert_param.pSrcData = image_data_sizeconvert_param.nSrcDataLen = frame_info.nFrameLenconvert_param.enSrcPixelType = frame_info.enPixelTypeconvert_param.enDstPixelType = frame_info.enPixelTypeconvert_param.pDstBuffer = (c_ubyte * nRGBSize)()convert_param.nDstBufferSize = nRGBSizeret = cam.MV_CC_ConvertPixelType(convert_param)if ret != 0:print("convert pixel fail! ret[0x%x]" % ret)del image_data_sizesys.exit()img_buff = (c_ubyte * convert_param.nDstLen)()cdll.msvcrt.memcpy(byref(img_buff), convert_param.pDstBuffer, convert_param.nDstLen)img = np.array(img_buff, dtype=np.int8)Img = img.reshape(1024, 1280)Img = cv.flip(Img, -1)Img = cv.flip(Img, -1)cv.imshow('img' + str(show_device_num), Img)cv.waitKey(25)if __name__ == '__main__':a = AccessToImages()device_list = a.FindDevices()if a:a.GetImages(0, device_list)# print(device_list.nDeviceNum)

运行时有问题的,操作系统是windows,海康工业相机 USB相机,需要源代码的,https://github.com/SICHENGJ/HK_Camera;

海康USB摄像头----MV-CAO13-21UM工业摄像头的调用---python实现相关推荐

  1. LiveGBS流媒体平台GB/T28181功能-摄像头报警告警预案触发图片截取视频录制海康大华华为宇视等摄像头报警触发截图录像

    LiveGBS摄像头报警告警预案触发图片截取视频录制海康大华华为宇视等摄像头报警触发截图录像 1.报警信息 1.1.报警查询 1.2.配置开启报警订阅 1.2.1.国标设备编辑 1.2.2.勾选订阅项 ...

  2. 海康web3.0控件实现在摄像头窗口多边形绘图

    海康web3.0控件实现在摄像头窗口多边形绘图 1.设置多边形播放模式 /** eanbleDraw函数* webVideoCtrl:初始化后的控件对象* iWndIndex :窗口索引* 注:预览模 ...

  3. LiveGBS流媒体平台GB/T28181常见问题-海康大华宇视华为NVR摄像头无法注册到国标平台看不到设备的时候如何抓包及排查

    LiveGBS常见问题-海康大华宇视华为NVR摄像头无法注册到平台国标平台看不到设备的时候如何抓包及排查 1.设备注册后查看不到 1.1.防火墙排查 1.2.端口排查 1.3.IP地址排查 1.4.设 ...

  4. TSINGSEE海康定制支持国标GB28181/RTMP推流摄像头如何接入EasyDSS视频平台?

    目前海康的RTMP推流摄像头已经在TSINGSEE官方网店上线了,咨询这款摄像头的人特别多,很多都问我们的摄像头是不是海康的产品,这个摄像头确实是海康原厂产品,也是TSINGSEE定制版,是海康唯一有 ...

  5. LiveGBS国标流媒体平台-海康NVR摄像机自带物联网卡摄像头注册GB/T28181国标平台看不到设备的时候如何抓包及排查

    GB/T28181国标流媒体平台海康大华宇视华为等硬件NVR摄像机注册到LiveGBS国标平台看不到设备的时候如何抓包及排查 1.设备注册后查看不到 1.1.是否是自带物联网卡的摄像头 1.2.关闭萤 ...

  6. 国标28181:海康、大华、宇视摄像头怎么添加GB28181协议

    海康 如何知道摄像机是否支持GB28181协议呢?浏览器输入:http://IP地址/doc/page/config.asp,比如: 下面介绍下各配置项基本意义: 本地SIP端口:默认为5060,SI ...

  7. iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频

    目       录 1.      概述... 1 2.      平台演示... 2 3.      硬件摄像头... 2 4.      视频流协议转换管理... 2 5.      组态视频元件 ...

  8. 海康摄像头音频编码获取

    画面合成中,需要音频数据推送(Pusher),经过大量测试发现, 海康摄像头分为2种: 1.视频服务器类,音频编码格式为G711U,在海康客户端软件中不能配置 2.摄像头类,音频编码包含G711A,G ...

  9. C++下OPENCV驱动调用海康GigE工业相机

    系列文章目录 第一章 Ubuntu22下OpenCV4.6.0+contrib模块编译安装 第二章 ubuntu22下C++ kdevelop环境搭建:OpenCV示例 第三章 C++下OPENCV驱 ...

  10. Python调用海康工业相机:包含相机参数修改、彩色原图显示(不失真)

    [引言] 海康相机作为目前工业检测.视觉定位等领域应用较为广泛的国产品牌相机,其搭配有一套专用视觉软件VM,而在完成具有复杂场景.复杂任务的科研项目时依靠其VM算法平台提供的视觉算法往往无法满足项目要 ...

最新文章

  1. UVALive2678:Subsequence
  2. Linux IPC POSIX 消息队列
  3. eclipse spring mysql_为Eclipse上的Maven project添加SpringMVC和Mybatis以实现数据库
  4. JS判断UA动态加载CSS的方法
  5. html信号动画,HTML5带音效的雷达检测信号动画
  6. PYTHON 处理JSON文件(新建key值Findex,并将歌手名字转换为大写首字母作为value值)
  7. 如何实现一个php框架系列文章【2】实现类的自动加载
  8. DT大数据 scala for查询
  9. C#判断文字是否为汉字
  10. 解二元一次方程————拓展欧几里得算法
  11. python怎么输入下一行_python中怎么换行,怎么从第一行换到第二行的?
  12. 回收宝只要6499买华为Mate40 Pro还送iPhone 12手机:结果被秒杀!
  13. 看板(Kanban)与Scrum区别
  14. java微信分享朋友圈_java怎么实现微信分享到朋友圈功能
  15. 关于职业能力倾向测试d类的软件,职业能力倾向测验D类及综合应用能力D类题型及分值...
  16. 自制的百度输入法皮肤
  17. surface pro3深度linux,surface pro4 安装deepin教程
  18. 127Echarts - 关系图(Graph Life Expectancy)
  19. (Crypto必备干货)详细分析目前NFT的几大交易市场
  20. python_speech_features库学习

热门文章

  1. 关于苹果ID用哪些邮箱注册比较好安全?
  2. 吃饭?睡觉?打豆豆?
  3. php 读取 eml,php如何读取解析eml文件以及生成网页的示例分享
  4. 从PCC到MIC,理解变量之间的相关性
  5. 边境的悍匪—机器学习实战:第十八章 强化学习
  6. Intel核芯显卡微架构浅析
  7. autoit java_AutoIt3客户端和Java服务器端TCP通信
  8. python高级数据筛选的方法_使用python对多个txt文件中的数据进行筛选的方法
  9. rtsp开源视频播放器VideoLAN
  10. 安卓毕业设计源码基于Uniapp+SSM实现的校园心理健康APP