海康工业相机 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;
}

posted @ 2019-10-15 16:44  陈加爵  阅读(6508)  评论(0编辑  收藏  举报