opencv从相机数据创建mat

时间:2011-08-03 10:07:56

标签: c++ opencv

在我的程序中我有从摄像机获取图像的功能,应该将所有数据打包在OpenCV Mat结构中。从相机我得到宽度,高度和unsigned char*到图像缓冲区。如果我有全局Mat变量,我的问题是如何从这些数据创建Mat。 Mat结构的类型我采用了CV_8UC1。

Mat image_;

function takePhoto() {
    unsigned int width = getWidthOfPhoto();
    unsinged int height = getHeightOfPhoto();
    unsinged char* dataBuffer = getBufferOfPhoto();
    Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP);

    printf("width: %u\n", image.size().width);
    printf("height: %u\n", image.size().height);

    image_.create(Size(image.size().width, image.size().height), CV_8UC1);
    image_ = image.clone();

    printf("width: %u\n", image_.size().width);
    printf("height: %u\n", image_.size().height);
}

当我测试我的计划时,我得到了width的{​​{1}}和height,但我的全局匹配imagewidth heightimage_。我如何正确地将数据放入我的全局0变量?

谢谢。

1 个答案:

答案 0 :(得分:15)

不幸的是,clone()copyTo()都没有成功将宽度/高度值复制到另一个Mat。至少在OpenCV 2.3上!真的很遗憾。

但是,您可以通过使函数返回Mat来解决此问题并简化代码。这样您就不需要拥有全局变量:

Mat takePhoto() 
{
    unsigned int width = getWidthOfPhoto();
    unsigned int height = getHeightOfPhoto();
    unsigned char* dataBuffer = getBufferOfPhoto();
    Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP);
    return Mat;
}

int main()
{
    Mat any_img = takePhoto();
    printf("width: %u\n", any_img.size().width);
    printf("height: %u\n", any_img.size().height);
}