手头有个项目需要实现通过采集卡采集手机桌面,获取ROI区域图像,进而进行视频自动化评测。opencv采集性能太低,不满足60fps的要求,查了资料,据说DirectShow可以达到100+frame 的采集速率。同时由于中间图像处理需要用到opencv,自然希望通过directShow+opencv直接采集为IplImage格式数据,是最完美的。
终于在opencv官方论坛找到了yushiqi老师的CameraDS类。就需要两个文件(CameraDS.cpp和h)+ DirectShow SDK。当然不必下载庞大的DS SDK,网上有很多lib+inc的SDK。据说只能用DirectShow 9b和之前的SDK。到目前,一切都非常顺利,采集手机桌面数据预览和帧率都满足我的要求。当是,开始进行有源SSIM打分时,发现经常只有2.0甚至更低MOS分。初始,我怀疑可能是采集卡或者通话引擎或者我代码数据处理的问题。排查了一圈,且通过对比AMCap程序,发现AMcap采集是完好的。失望的发现,这种方式采集下来的原始图像就是有问题的。现象是:采集几十帧就会概率出现一帧错误图像,对运动区块某帧会出现横条纹。网上某个论坛里,我也看到有人询问同样的问题,但是没有得到解决答案,而且我1080p/720p都会出现。
到此有些无助了,只有硬着头皮去研究一下DirectShow SDK采集和SampleGrabber了。也下载了AMCap源码,毕竟它没有出现我这种问题