zoukankan      html  css  js  c++  java
  • 海康工业相机 MVS 抓图并转为Mat格式,支持彩色相机

    int CMyCamera::startGrabImage(Mat &image, string &info)
    {

        unsigned int nRecvBufSize = 0;
        MVCC_INTVALUE stParam;
        memset(&stParam, 0, sizeof(MVCC_INTVALUE));
        int nRet = MV_CC_GetIntValue(m_hDevHandle, "PayloadSize", &stParam);
        if (nRet != 0)
        {
            return -1;
        }
        nRecvBufSize = stParam.nCurValue;
        m_pBufForDriver = (unsigned char *)malloc(nRecvBufSize);
        MV_FRAME_OUT_INFO_EX stImageInfo = { 0 };
        nRet = MV_CC_GetOneFrameTimeout(m_hDevHandle, m_pBufForDriver, nRecvBufSize, &stImageInfo, 1000);
        if (nRet != 0)
        {
            return -1;
        }
        m_nBufSizeForSaveImage = stImageInfo.nWidth * stImageInfo.nHeight * 3 + 2048;
        m_pBufForSaveImage = (unsigned char*)malloc(m_nBufSizeForSaveImage);

        bool isMono;//判断是否为黑白图像
        switch (stImageInfo.enPixelType)
        {
        case PixelType_Gvsp_Mono8:
        case PixelType_Gvsp_Mono10:
        case PixelType_Gvsp_Mono10_Packed:
        case PixelType_Gvsp_Mono12:
        case PixelType_Gvsp_Mono12_Packed:
            isMono = true;
            break;
        default:
            isMono = false;
            break;
        }

        if (isMono)
        {
            image = Mat(stImageInfo.nHeight, stImageInfo.nWidth, CV_8UC1, m_pBufForDriver);
        }
        else
        {
            //转换图像格式为BGR8
            MV_CC_PIXEL_CONVERT_PARAM stConvertParam = { 0 };
            memset(&stConvertParam, 0, sizeof(MV_CC_PIXEL_CONVERT_PARAM));
            stConvertParam.nWidth = stImageInfo.nWidth;             
            stConvertParam.nHeight = stImageInfo.nHeight;           
            stConvertParam.pSrcData = m_pBufForDriver;             
            stConvertParam.nSrcDataLen = stImageInfo.nFrameLen;   
            stConvertParam.enSrcPixelType = stImageInfo.enPixelType;  
            stConvertParam.enDstPixelType = PixelType_Gvsp_BGR8_Packed;
            //stConvertParam.enDstPixelType = PixelType_Gvsp_RGB8_Packed;
            stConvertParam.pDstBuffer = m_pBufForSaveImage;                
            stConvertParam.nDstBufferSize = m_nBufSizeForSaveImage;        
            MV_CC_ConvertPixelType(m_hDevHandle, &stConvertParam);
            image = Mat(stImageInfo.nHeight, stImageInfo.nWidth, CV_8UC3, m_pBufForSaveImage);
            return MV_OK;
        }
        return MY_FAIL;
    }

    后知后觉、越学越菜
  • 相关阅读:
    OC面向对象—封装
    OC内存管理
    OC方法和文件编译
    OC语言基础知识
    OC语言前期准备
    C语言指针基础
    C语言字符串
    C语言数组
    C语言内存分析
    C语言函数
  • 原文地址:https://www.cnblogs.com/chenhuanting/p/11678685.html
Copyright © 2011-2022 走看看