如何创建内存中连续的OpenCV图像?

时间:2013-09-19 09:53:55

标签: opencv memory-management

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

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

2 个答案:

答案 0 :(得分: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,因为我已经习惯了它,但是在具有cvCreateImage函数的C api中必须存在类似的行为。

答案 1 :(得分: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));