Tag: video处理

将数据写入文件:fflush()需要花费大量时间

我有一个要求,我必须缓冲大量数据(以GB为单位),以备将来使用。 由于没有足够的RAM可用于缓冲如此大量的数据,我决定将数据存储在一个文件中。 现在的缺陷是,当我将数据写入文件时,其他线程可能需要“缓冲”数据,因此每次我写入内容时都必须刷​​新文件流。 确切地说,数据是我作为预先记录的数据(如TiVo)缓冲的video帧,其他线程可能或可能不想在任何给定的时间点写入它,但是当它们这样做时,它们会从文件和进程中fread框架。 在一般情况下, fwrite – fflush组合大约需要150 us,但偶尔(并且相当规律),组合需要超过1.5秒。 我无法负担这一点,因为我必须实时处理帧。 我在这里有很多问题: 我在文件中缓冲数据的方法是否正确? 我有什么替代品? 知道为什么fwrite-fflush操作在某些情况下会突然花费更多时间吗? 请注意,在1.5秒后,它会恢复到150 us。

OpenCV分组白色像素

我已经完成了艰苦的工作,将我的MacBook上的iSight摄像头转换为红外摄像头,转换它,设置阈值等等。现在有一个看起来像这样的图像: 替代文字 我现在的问题是; 我需要通过分组白色像素来了解我的图像上有多少个斑点。 我不想使用cvBlob / cvBlobsLib ,我宁愿只使用OpenCV中已有的东西。 我可以通过检查(阈值)触摸白色像素来循环像素并对它们进行分组,但我猜测从OpenCV可能有一种非常简单的方法吗? 我猜我不能使用cvFindContours因为这将检索一个大数组中的所有白色像素,而不是将它们分成“组”。 有人可以推荐吗? (注意这些不是圆圈,只是从小红外LED发出的光) 提前谢谢了! tommed

FFMPEG无法显示video的持续时间

我正在尝试使用ffmpeg从video文件中捕获帧,但我甚至无法获得video的持续时间。 每次当我尝试使用pFormatCtx->duration来访问它时我得到0.我知道指针初始化并包含正确的持续时间,因为如果我使用av_dump_format(pFormatCtx, 0, videoName, 0); 那么我实际上得到了持续时间数据以及有关video的其他信息。 这是我使用av_dump_format(pFormatCtx, 0, videoName, 0); : 输入#0,avi,来自’futurama.avi’: 持续时间:00:21:36.28,开始:0.000000,比特率:1135 kb / s 流#0.0:video:mpeg4(高级简单配置文件),yuv420p,512×384 [PAR 1:1 DAR 4:3],25 tbr,25 tbn,25 tbc 流#0.1:音频:ac3,48000Hz,立体声,s16,192kb / s 我不明白为什么av_dum_format可以显示持续时间而我不能。 我检查了函数定义,显示持续时间,该函数也使用pFormatCtx-> duration。 当我在main.cpp中调用它们时,其他成员变量也不会显示正确的数据 这是我的main.cpp: extern “C” { #include #include #include } int main(int argc, char *argv[]) { AVFormatContext *pFormatCtx = NULL; const char videoName[] = “futurama.avi”; // […]

在cvSetCaptureProperty中使用CV_CAP_PROP_POS_FRAMES获取单个帧

我试图通过设置CV_CAP_PROP_POS_FRAMES属性然后像这样读取框架来跳转到特定的框架: cvSetCaptureProperty( input_video, CV_CAP_PROP_POS_FRAMES, current_frame ); frame = cvQueryFrame( input_video ); 我面临的问题是,OpenCV 2.1为current_frame的12个连续值返回相同的帧,而我想读取每个单独的帧,而不仅仅是关键帧。 谁能告诉我有什么问题? 我做了一些研究,发现问题是由解压缩算法引起的。 类似MPEG的算法(包括HD等)不会分别压缩每个帧,而是不时地保存关键帧,然后仅保存最后一帧和后续帧之间的差异。 您报告的问题是由于,当您选择一个帧时,解码器(ffmpeg,可能)会自动前进到下一个关键帧。 那么,有没有办法解决这个问题呢? 我不只想要关键帧,而是每个帧。

如何在FFmpeg C / C ++中寻找

有没有人知道如何在FFmpeg中实现秒(或毫秒)的搜索。 我目前有一个使用av_read_frame()运行video帧的循环,我想确定此帧应该以秒为单位的时间。 如果它到达某一点,那么我想寻求video的后续点。 顺便说一下,它不是video播放器,只是处理帧。 我听说我应该可以从数据包中获取dts或pts,但它总是返回0。