将系列图像写入缓冲内存的最佳方法

时间:2012-01-24 14:26:24

标签: c++ opencv computer-vision

有没有办法使用imencodeimdecode来编写和读取程序中生成的系列图像到全局缓冲区?

我正在使用cv::Mat来阅读我的图片。我不想使用vector<Mat>IplImage*数组,因为我遇到了一些问题?

2 个答案:

答案 0 :(得分:1)

听起来你想要将所有图像的数据分别存储在一个大缓冲区中。当然,这不适用于cv::Mat的数组(或向量),因为它们只是自己分配图像数据存储器的包装器。

使用cv::Mat s仍然可以实现这一点。首先分配整个缓冲区,当然其大小适合包含所有图像,然后使用接受指向用户分配数据的指针的cv::Mat constructor

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP) 

使用适当的data指针查看各个子图像。这样,cv::Mat只是一个围绕您自己的图像数据的轻量级包装器,无论它存储在何处。但是,当然现在您负责管理(分配和释放)图像数据存储并以正确的大小提供存储。

但请记住,这只会将图像数据(像素)存储在一个大的连续缓冲区中。图像属性(如宽度,高度,位深度)存储在cv::Mat个对象中。所以我不确定这个全局缓冲存储器是否真的会在性能或可用性方面为你带来任何东西,也许如果图像a非常(非常小)。当然,您放弃了cv::Mat的资源管理工具,因为您现在管理图像存储器并需要使其与图像的属性保持同步。

答案 1 :(得分:0)

只是循环图像?

或者您是否尝试将一系列图像写入单个动画gif或平铺图像?