将char数组转换为Opencv Mat

时间:2016-05-09 13:36:06

标签: opencv char mat

我已经定义了一个数组char buf [],需要将其转换为Opencv Mat。有办法吗?

char buf[Max_size];

2 个答案:

答案 0 :(得分:3)

没有任何内容可以调用:“将cv::Mat数组转换为cv::Mat”。 cv::Mat是表示内存中图像的容器。它可能拥有数据,也可能不拥有。如果要创建char来表示某个cv::Mat my_mat(rows,cols,CV_8UC1,&buf[0]); //in case of BGR image use CV_8UC3 数组中的位图数据的图像,可以使用以下代码。很有趣,你知道图像的行和列。

cv::Mat

请注意,在这种情况下,{{1}}不拥有数据的所有权。您已手动删除数据。但是,由于它是一个堆栈数组,因此您不需要任何操作。

答案 1 :(得分:1)

我认为Humams的答案是正确的,但是,这是一个完整的C ++示例,说明如何从无符号char数组中获取图像。

    #include <opencv2/opencv.hpp>  

    unsigned char img_data[] = {
        // first row, 4 colored pixels
        0, 0, 0,
        255, 0, 0,
        0, 0, 0 ,
        0, 255, 0,

        // second row, 4 colored pixels
        0, 0, 255,
        0, 0, 0,
        255, 0, 255,
        0, 0, 0
    };

    // get a correct pointer to the data
    unsigned char * img_data_ptr = (unsigned char*) &img_data;

    cv::Mat img(2, 4, CV_8UC3, img_data_ptr);
    cv::cvtColor(img, img, cv::COLOR_BGR2RGB);
    cv::imwrite("/out/myimage.png", img);

该示例在https://github.com/FilipSivak/opencv-minimal上被Docker化