相关文章推荐
另类的甜瓜  ·  Cannot invoke ...·  8 月前    · 
唠叨的火车  ·  java中文排序-掘金·  1 年前    · 
长情的山羊  ·  SQL CREATE TABLE 语句 | ...·  1 年前    · 
一身肌肉的山楂  ·  c++ read lines from ...·  1 年前    · 
海康工业相机 图像采集流程

环境设置
先安装MVS,下载地址
海康机器人官网
条件:Python+海康官方的mvs文件下的development/samples下的python文件夹
注意:相机连接后不要用官方app打开相机,不然python代码检测不到设备,代码在pycharm会提示报错,亲测能跑并能截取到图片(这个就是说,相机不要被其他软件链接占用啦,同一时刻,一个相机只能被一个软件链接)
需要添加模块MvImport的路径: 这是整个代码的核心,文件里面内容如下,具体可以下载MVS里面例程里面有:

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

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

python调用海康威视工业相机SDK实现图片采集

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

两种方式 主动取流/回调出流

以主动取流为例流程如下:

主动取流

被动取流

tlayerType = MV_GIGE_DEVICE | MV_USB_DEVICE | MV_UNKNOW_DEVICE | MV_1394_DEVICE | MV_CAMERALINK_DEVICE
# 枚举网口、USB口、未知设备、cameralink 设备
  1. 通过MV_CC_EnumDevices(tlayerType, device_list)搜索存在的设备。

  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.nHeight
    convert_param = MV_CC_PIXEL_CONVERT_PARAM()
    memset(byref(convert_param), 0, sizeof(convert_param))
    convert_param.nWidth = frame_info.nWidth
    convert_param.nHeight = frame_info.nHeight
    convert_param.pSrcData = image_data_size
    convert_param.nSrcDataLen = frame_info.nFrameLen
    convert_param.enSrcPixelType = frame_info.enPixelType
    convert_param.enDstPixelType = frame_info.enPixelType
    convert_param.pDstBuffer = (c_ubyte * nRGBSize)()
    convert_param.nDstBufferSize = nRGBSize
    ret = cam.MV_CC_ConvertPixelType(convert_param)
    
    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)
    

取流核心代码如上,所有代码我就不放了,大家可以自己尝试一下印象更深。

常见SDK错误码解析

GB-CosFace: Rethinking Softmax-based Face Recognition from the Perspectiv从开放集分类的角度重新思考基于Softmax的人脸识别 2022年5月26日 conda创建指定路径里面的虚拟环境 2023年3月5日 1.认识网络爬虫 2023年3月9日 ChatGPT解答:python大批量读写ini文件时,性能很低,有什么解决方法吗,给出具体的思路和实例 2023年4月5日 浅谈ConvNeXt(Pytorch) 2022年3月7日 基于轻量级CNN开发构建学生课堂行为识别系统 2023年3月28日 Pycharm中安装pytorch 2023年3月5日 对Transformer中Add&Norm层的理解 2023年2月25日 在CPU上跑yolov5(详细步骤+适合入门) 2023年3月1日 用pointnet++分类自己的点云数据 2023年2月16日