繁体   English   中英

opencv从相机数据创建mat

[英]opencv create mat from camera data

在我的程序中,我有从摄像机获取图像的功能,应该将所有数据打包在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);
}

当我测试的程序,我得到正确的widthheightimage ,但widthheight我的全球垫的image_0 我如何正确地将数据放入我的全局Mat变量?

谢谢。

不幸的是, clone()copyTo()成功地将width / height的值复制到另一个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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM