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

问题

海康相机自己提供的/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 是一个动态内存的指针,不停的有数据进来,可能是导致问题的原因。
  • 直接内存块拷贝,然后处理,是不错的方式。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容