我有6个USB摄像头,接到PC机上,我使用opencv和qt,能全部同时打开,并imshow
显示出图像,并保持30fps的帧率,
我每个USB摄像头使用了1个线程去读取摄像头数据,然后显示出来。
我想将采集的图片一张一张无损的保存在本地png格式,但是当我在读取的线程中imwrite保存的时候,就会降低帧率(摄像头保持30FPS,PC的读取帧率降低)
我改变了思路,我创建了6个队列,每一个线程去获取图片,然后扔到对应的队列里面,然后创建6个线程去读取队列并保存。
我发现帧率还是降低的,并不能保证满帧率,
因为PC机是4核8线程,即使加了很多线程,都是在轮询执行,保存图片的线程占用了读取图片线程的时间。
有没有大佬有好的解决办法呢,我想30fps不丢帧的保存下来摄像头拍摄的图片,并且图片需要无损的方式。
离线
一张一张无损的保存在本地png格式
磁盘IO速度与CPU不在一个量级, 你现在是机械硬盘? 要不要用DDR模拟一个磁盘试一试?
离线
建议先堆硬件, 先把需求实现再说, 毕竟配一台好的电脑比人工划算多了.
然后后面再做cost down, 找到性价比的平衡点.
离线
VisualStudio工具里面有一个性能分析器, 可以采集一段时间内程序运行情况,
分析报告非常详细,可以显示每行代码/每个函数占用的时间,
楼主可以试一试。
离线
既然硬盘是瓶颈,那多插几个高质量优盘行不行?几个摄像头写往不同优盘,只要总线带宽不满吞吐量应该可以上升。
离线
不是硬盘是瓶颈,硬盘的写入速度可达300MB/s
但由于一帧帧保存图片属于小文件,单个文件保存速度很慢,达不到较高的速度。
看起来瓶颈在写文件?
每秒要写 6*30 = 180 个png 文件?
写一个单线程程序, 全速写png文件, 看平均每秒能写多少个?
比如算下来每秒能写 60个png文件, 那么就准备3个硬盘继续测试.
离线
楼主可以贴一下每个图片文件的大小,方便大家分析。
如果是 30fps ,每次采集完后有30ms时间压缩并存储文件。
我认为6个摄像头 30fps png 对硬盘不会造成压力,除非保存的是非压缩格式,瓶颈应该不在IO,尤其是SSD。
“但由于一帧帧保存图片属于小文件,单个文件保存速度很慢,达不到较高的速度” 这个结论不一定可靠,建议楼主比较严格的方式测试,比如写个小程序,循环创建文件并写入几百k的数据,看看每次写入耗费的时间,算算一秒能写多少个这样的文件。
最后有可能是imwrite 效率太低了。
离线