我理解如何创建一个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?
}
答案 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);
}