0

我了解如何创建一个 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?

    }
4

3 回答 3

1

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

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

如果该矩阵已经初始化为:

cv::Mat myMat(高度,宽度, CV_8UC1);

您不需要任何进一步的修改来设置数据类型。

于 2013-11-08T10:03:08.830 回答
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;
}
于 2013-11-08T10:17:44.610 回答
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);
}
于 2013-11-08T11:21:38.137 回答