gpt4 book ai didi

c - 多个图像的内存缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:59 25 4
gpt4 key购买 nike

我在 PC 上从两个摄像头接收图像。流不是连续的,而是在事件检测时发生。因此,我必须在特定时间后收到大约 8-10 个图像对。由于我必须处理图像,所以我想先将所有图像保存在一个大缓冲区中,然后再进行批量处理。将图像保存在两个大缓冲区(每个摄像机一个)中也是可以接受的。如何将这对图像保存在一个(或两个)大缓冲区中?我正在用 C 实现这个程序。

最佳答案

假设通过以下API获取图片:

int ImageGet(
char * pBuffer,
size_t * pSize); /* returns 0 on success or any other value if no image is available or on error */

您可以执行以下操作:

#include <stdlib.h>
#include <string.h>

...

#define IMAGESIZE_MAX (1024*1024)

char * pBuffer = NULL;
char * pBufferCurrent = pBuffer;
int iResult = 0;
size_t size = IMAGESIZE_MAX;
size_t sizeTotal = 0;

do
{
char * pBufferCurrent = realloc (
pBuffer,
sizeTotal + sizeof(size) + size);

if (!pBufferCurrent)
{
break;
}

pBuffer = pBufferCurrent;

pBufferCurrent += sizeTotal;

if ((iResult = ImageGet (
pBufferCurrent + sizeof(size),
&size))
{
break;
}

memcpy (
pBufferCurrent,
&size,
sizeof(size));

sizeTotal += (sizeof(size) + size);
} while (1);

...

这会按顺序存储您的数据:

[     size 1     ][  image data 1  ][     size 2     ][  image data 2  ]...
<-sizeof(size_t)-><- size 1 -><-sizeof(size_t)-><- size 2 ->

pBuffer 指向的缓冲区中。


要从缓冲区 pBuffer 中检索对描述图像 N 的数据的引用,您可以使用以下方法:

const char * BufferImageGetByIndex(
const char * pBuffer,
unsigned indexImage)
{
for (unsigned indexImageCnt = 0;
indexImageCnt < indexImage;
++ indexImageCnt)
{
pBuffer += sizeof(size_t) + *((size_t *) pBuffer);
}

return pBuffer;
}

然后要实际获取图像,您可以这样做:

...
/* Get a reference to the data decribing **fourth** image in the buffer filled by the example above. */
const char * pBufferImage4 = *BufferImageGetByIndex(pBuffer, 3);

/* Get the size ... */
size_t sizeImage4 = *((size_t *) pBufferImage4);
/* ... and a reference to the image data. */
const char * pImage4 = pBufferImage4 + sizeof(size_t);
...

关于c - 多个图像的内存缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10399095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com