opencv从相机数据创建mat

M.K*_*.K. 10 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);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

kar*_*lip 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);
}
Run Code Online (Sandbox Code Playgroud)

  • `cv :: Mat`是OpenCV的C++接口的Mat类型.`cvMat`用于C接口.`cvCreateMat()`在C接口中创建`cvMat`.让我们不再劫持这个帖子,如果你有疑问,你可以在新的帖子中自由地问他们.再见. (3认同)