我是 OpenCV 新手。我使用cvCreateImage
创建一个OpenCV图像并对其应用一些操作。现在,我想创建一系列底层内存连续的OpenCV图像。这有助于稍后使用并行或CUDA技术将该内存处理为一系列图像帧。
如何在内存中创建一定数量的连续OpenCV图像?
答案 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));