C ++ - 将unsigned char *复制到新的unsigned char *数组

时间:2014-01-26 21:24:54

标签: c++ arrays opencv std unsigned-char

对于我发布的here问题,这是一个后续问题,尽管它有足够的不同以保证发布新问题。

我有一个OpenCVcv::Mat)矩阵变量(只是已知大小的unsigned char *)。我使用引用问题中的答案使用代码将std::string复制到我的unsigned char*数组:

int initial_offset = 10;
unsigned char *r_record = new unsigned char[1024]();
std::copy(title.begin(), title.end(), r_record + initial_offset);

这可以按预期工作。但是现在我想循环遍历cv::Mat变量的每一行,并将那些unsigned char值插入到同一个r_record数组中。

我有代码:

int data_offset = TITLE_OFFSET + 1;
cv::Mat &img = <from somewhere else>

for (int row=0; row<=img.rows; row++) {
        unsigned char* i_row = img.row(row).data;
        std::copy(???, ???, r_record + data_offset);
        data_offset += img.cols; //This happens to be += 32 in every case that I am using
}

但我不确定???代替i_row数据的原因。 可以这样做吗?

另外,显然使用new unsigned char[1024]()是一个坏主意,但我不知道如何用而不是错误替换它。

更新

看起来下面@juanchopanza的回复不太合适。 这就是我所拥有的:

std::string = "Title 1";
cv::Mat mat = <from somewhere else>;

//Test case
desc.data[1] = (unsigned char)65;

//Write the image information to the database
unsigned char *image_record = new unsigned char[1024]();
std::copy(title.begin(), title.end(), r_record + title_offset);
std::copy(mat.begin<unsigned char>(), mat.end<unsigned char>(), r_record + 33);

但无论如何,r_record仅包含:"Title 1"。有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

这样的事情:

std::copy(img.begin<unsigned char>(), img.end<unsigned char>(), r_record + data_offset);