0

我是OpenCV新手。cvCreateImage我使用并应用了一些操作来创建一个 OpenCV 图像。现在,我想创建一系列底层内存为contiguous的 OpenCV 图像。这有助于稍后使用并行或 CUDA 技术将该内存作为一系列图像帧进行处理。

如何创建一定数量的在内存中连续的 OpenCV 图像?

4

2 回答 2

3

您可以自己分配数据:

const int W = 640;
const int H = 480;
const int C = 1;  // number of channels (1 for CV_8U)
const int N = 10; // number of images
unsigned char buffer[W*H*C*N];

cv::Mat im0(H, W, CV_8U, buffer);
cv::Mat im1(H, W, CV_8U, buffer + W*H*C);
cv::Mat im2(H, W, CV_8U, buffer + W*H*C*2);

我使用了 C++ API,因为我更习惯它,但是 C api 中必须存在与该cvCreateImage函数类似的行为。

于 2013-09-19T10:16:15.577 回答
1

您可以使用 cv::Mat 来管理存储,然后您不必记得删除存储。假设 3 通道图像:

const int W = 640; const int H = 480; const int C = 1;
const int N = 10; // number of images
cv::Mat buffer (N, W * H, CV_8UC3);

cv::Mat im0(H, W, CV_8UC3, buffer.ptr<uchar>(0));
cv::Mat im1(H, W, CV_8UC3, buffer.ptr<uchar>(1));
cv::Mat im2(H, W, CV_8UC3, buffer.ptr<uchar>(2));
于 2014-07-01T12:49:24.937 回答