如何调整空的cv :: Mat对象

时间:2013-11-08 09:56:03

标签: c++ opencv

我理解如何创建一个opencv Mat对象,假定指向图像像素的指针以及一些其他辅助信息。例如:

int width = 100;
int height = 200;
unsigned char *pPixel = new unsigned char [width*height];
cv::Mat myMat(height,width, CV_8UC1,pPixel);
delete []nPixel;

我的下一个问题是:假设myMat已经作为一个空的cv :: Mat对象存在,在这种情况下,我们如何将图像信息分配给空的myMat对象?这可能发生在以下函数中:

void create_mat(int width, int height, int band_num, unsigned char *pPixel, cv::Mat &obj)
{
   // adjust obj based on width, height and pPixel

}

编辑:可能的解决方案:

 void create_mat(int width, int height, int band_num, unsigned char *pPixel, cv::Mat &obj)
    {
        obj.data = pPixel;
        obj.rows = height;
        obj.cols = width;
           // how to assign image data type?

    }

3 个答案:

答案 0 :(得分:1)

要将数据分配给已初始化的Mat对象,可以使用std::copy

std::copy(pPixel, pPixel + width*height, &obj.data[0]);

如果该矩阵已用:​​

初始化

cv :: Mat myMat(height,width,CV_8UC1);

您无需进一步修改即可设置数据类型。

答案 1 :(得分:1)

我不确定band_num是什么意思,你可以使用

void create_mat(int width, int height, int band_num, unsigned char *pPixel, cv::Mat &obj)
{
   obj.create(width, height, type); // e.g. type: CV_8UC1
   obj.data = pPixel;
}

答案 2 :(得分:0)

使用相同的构造函数:

void create_mat(int width, int height, int band_num, unsigned char *pPixel, cv::Mat &obj)
{
    obj = cv::Mat(height, width, CV_8UC1, pPixel);
}