所以我希望有人可以帮助我解决这个问题,这对于任何有编程经验的人来说都是显而易见的,但对我来说却不是!请原谅我糟糕的描述,因为我不知道很多事情的正确术语。
基本上,我使用安装了图像采集卡(Matrox Meteor II)的旧(ish)计算机继承了一个项目。我的基本目标是简单地从摄像机实时捕获实时视频,并将其未压缩地写入计算机的硬盘。该卡的编程是用 C 语言完成的,并使用了一个与它捆绑在一起的库,称为 Matrox Imaging Library (MIL)。
目前我只是将我所有的原始图像写成一个位数组并使用 imageJ 来查看它们。我编写了一个使用双缓冲的基本程序,因此将图像捕获到缓冲区然后写入文本文件,同时将下一个图像捕获到另一个缓冲区。我将在下面放一个代码片段,所有 M 前缀命令都来自 MIL 库。但是,您实际上并不需要了解它们来帮助我。
我只使用以下内容:
/* Put the digitizer in asynchronous mode. */
MdigControl(MilDigitizer, M_GRAB_MODE, M_ASYNCHRONOUS);
/* Grab the first buffer. */
MdigGrab(MilDigitizer, MilImage[0]);
/*open my file where I will write the images*/
pfile = fopen("myfile.txt", "wb");
/* Process one buffer while grabbing the other. */
while( !kbhit() )
{
/* Grab second buffer while processing first buffer. */
MdigGrab(MilDigitizer, MilImage[1]);
/* Synchronize and start the timer. */
if (NbProc == 0)
{
MappTimer(M_TIMER_RESET, M_NULL);
}
/* Process the first buffer already grabbed. */
/*copy the image to a display buffer*/
#if COPY_IMAGE
MbufCopy(MilImage[0], MilImageDisp);
#endif
/*Here we copy the buffer into a user supplied array*/
MbufGet(MilImage[0], my_array);
/* Then we write the array into the text file using fwrite*/
fwrite(my_array,sizeof(char),sizeof(my_array),pfile);
/*Output the amount of time it took to process that image*/
MappTimer(M_TIMER_READ, &Time);
Capture_Time = Time - Time_Holder;
printf("IMG %s took %.7f .\n", text, Capture_Time);
Time_Holder = Time;
/* Count processed buffers. */
NbProc++;
/* Grab first buffer while processing second buffer. */
MdigGrab(MilDigitizer, MilImage[0]);
/* Process the second buffer already grabbed. */
#if COPY_IMAGE
MbufCopy(MilImage[1], MilImageDisp);
#endif
/*Here we copy the buffer into our array*/
MbufGet(MilImage[1], my_array);
/* Then we write the array into the text file using fwrite*/
fwrite(my_array,sizeof(char),sizeof(my_array),pfile);
MappTimer(M_TIMER_READ, &Time);
Capture_Time = Time - Time_Holder;
printf("IMG %s took %.7f .\n", text, Capture_Time);
Time_Holder = Time;
/* Count processed buffers. */
NbProc++;
}
getchar();
/* Wait last grab end and stop timer. */
MdigGrabWait(MilDigitizer, M_GRAB_END);
/*Close our file*/
fclose(pfile);
我的问题是我想以 24fps 的帧速率进行上述操作,但我发现捕获图像并将它们写入硬盘的过程有时会比这稍慢(减速不一致但程序似乎偶尔会在一帧上挂起约 500 毫秒)。
我想知道是否有人知道一种方法来诊断导致这些减速的原因,以及是否可能是我硬盘的写入速度。