OpenCV:如何从ueye相机将CHAR数据加载到UCHAR cv :: Mat结构中

时间:2012-11-09 23:01:33

标签: opencv char

我将脚本从IplImage转换为CvMat结构时出现了一个小问题。 大多数脚本我没有问题,但在我的特定脚本中从我的ueye相机捕获图像我似乎无法找到一种方法来完成这项工作而不保留IplImage。

我想要做的是将m_pcImageMemory直接加载到CvMat结构中..但这是CHAR ..而cv :: Mat使用UCHAR。

是否有人举例说明如何创建空白的cv :: Mat,创建正确的标头并将m_pcImageMemory加载到新的cv :: Mat中?

请参阅下面的代码:

cv::Mat getframeMat_ueye(){
    if (m_hCam !=0) {
        if (is_CaptureVideo (m_hCam, IS_WAIT) == IS_SUCCESS) {
            is_RenderBitmap (m_hCam, m_lMemoryId, m_hWndDisplay, m_nRenderMode);
        }
    }


    IplImage* tmpImg = cvCreateImageHeader (cvSize (m_nSizeX, m_nSizeY), IPL_DEPTH_8U, m_channels);
    ueye_hasheader=true;
    tmpImg->imageData = m_pcImageMemory; 
    cv::Mat retmat=cv::cvarrToMat(tmpImg);
    cvReleaseImage(&tmpImg);

    return retmat;
}

根据Martin的评论,我将代码更改为:

cv::Mat getframeMat_ueye(){
    if (m_hCam !=0) {
        if (is_CaptureVideo (m_hCam, IS_WAIT) == IS_SUCCESS) {
            is_RenderBitmap (m_hCam, m_lMemoryId, m_hWndDisplay, m_nRenderMode);
        }
    }

    cv::Mat retmat(m_nSizeX, m_nSizeY,CV_8UC(m_channels),m_pcImageMemory);
    return retmat;
}

但是,当我这样做时,返回的图像会被分散,图像尺寸也不正确。 (周围有宽度的大小。)

问候和感谢, 弗洛。

1 个答案:

答案 0 :(得分:1)

不要再使用iplImage了。

cv :: Mat mat(sizeX,sizeY,CV_8UC1,the_imagedata_camera);

显然垫子只在数据不变的情况下有效。不要担心char / uchar - 来自摄像机的数据几乎不会被签名!