有没有办法使用imencode
和imdecode
来编写和读取程序中生成的系列图像到全局缓冲区?
我正在使用cv::Mat
来阅读我的图片。我不想使用vector<Mat>
和IplImage*
数组,因为我遇到了一些问题?
答案 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或平铺图像?