美文网首页
海康相机的数据存储与转换

海康相机的数据存储与转换

作者: 闪电侠悟空 | 来源:发表于2024-09-15 16:21 被阅读0次

问题

海康相机自己提供的/opt/MVS/Samples/64/Python/ConvertPixelType代码报错,无法运行

截图 2024-09-16 16-11-18.png

故障代码

        nRGBSize = stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight * 1
        
        stConvertParam = MV_CC_PIXEL_CONVERT_PARAM_EX()
        memset(byref(stConvertParam), 0, sizeof(stConvertParam))
        stConvertParam.nWidth = stOutFrame.stFrameInfo.nWidth
        stConvertParam.nHeight = stOutFrame.stFrameInfo.nHeight
        stConvertParam.pSrcData = stOutFrame.pBufAddr
        stConvertParam.nSrcDataLen = stOutFrame.stFrameInfo.nFrameLen
        stConvertParam.enSrcPixelType = stOutFrame.stFrameInfo.enPixelType
        stConvertParam.enDstPixelType = PixelType_Gvsp_Mono8 #PixelType_Gvsp_RGB8_Packed 
        stConvertParam.pDstBuffer = (c_ubyte * nRGBSize)()
        stConvertParam.nDstBufferSize = nRGBSize
        
        ret = cam.MV_CC_ConvertPixelTypeEx(stConvertParam) 

分析

上述问题发生在数据格式转换的过程中,针对这个问题,发现是函数MV_CC_ConvertPixelTypeEx函数故障,结合状态码

截图 2024-09-16 16-14-37.png

感觉是内存方面出了问题。

查找一番,发现了这个https://blog.csdn.net/qq_44621315/article/details/141139882,感觉可以用来试试。

解决办法

        print ("get one frame: Width[%d], Height[%d], nFrameNum[%d]"  % (stOutFrame.stFrameInfo.nWidth, stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nFrameNum))
        
        # 内存拷贝
        pData = (c_ubyte * stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)()
        libc = CDLL('libc.so.6')   #创建动态链接库接口,
        libc.memcpy(byref(pData), stOutFrame.pBufAddr,stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight)   #linux下复制函数的调用,将结构体stOutFrame中的图像数据复制到'pdata'指向的内存位置
                
        # 数据解析与存储
        data = np.frombuffer(pData, count=int(stOutFrame.stFrameInfo.nWidth * stOutFrame.stFrameInfo.nHeight), dtype=np.uint8)
        data = data.reshape(stOutFrame.stFrameInfo.nHeight, stOutFrame.stFrameInfo.nWidth, -1)
        print(data.shape, data.dtype)
        cv2.imwrite("xxx.bmp", data)

总结

  • stOutFrame.pBufAddr 是一个动态内存的指针,不停的有数据进来,可能是导致问题的原因。
  • 直接内存块拷贝,然后处理,是不错的方式。

相关文章

  • 猿学-Java基础教程运算详解及简单的练习

    数据类型转换 自动类型转换 存储容量小的数据类型的数据可以直接转换成存储容量大的数据类型的数据 整数和整数之间的转...

  • 2022-05-08

    (162条消息) 海康工业相机IO触发输入输出接线图青山笑我依旧在的博客-CSDN博客海康相机io接线图[http...

  • Spark-深入理解Spark 核心思想和源码分析阅读笔记

    第五章 数据处理与执行 5.3 RDD转换与DGA 数据处理模型RDD 数据机构, 可控制数据存储位置, 提供操作...

  • 数据持久化之NSUserDefaults

    所谓的数据持久化、就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以...

  • 数据持久化

    数据持久化(PO)就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.数据模型可以是...

  • iOS开发——基于NSNumber的单位转换方案

    在日常开发中总会遇到数据的单位转换与存储的问题,存储数据时需要转化成默认单位,展示数据时可能又要转化成另一单位。我...

  • iOS逆向007--数据结构(二):结构体

    结构体与NSData的转换 NSData是用来包装数据的。NSData存储的是二进制数据,屏蔽了数据之间的差异,文...

  • iOS中的数据持久化

    本文由我们团队的王瑞华童鞋撰写。 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据...

  • MyBatis框架介绍及实战操作

    一、基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数...

  • MyBatis框架介绍及实战操作

    一、基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数...

网友评论

      本文标题:海康相机的数据存储与转换

      本文链接:https://www.haomeiwen.com/subject/vvmiljtx.html