我正在尝试使用OpenCV读取和显示4K视频文件。相同的程序(附录A中显示的一个非常简单的程序)在显示1080个视频时效果很好,但是在升级到4K视频时会有明显的滞后。
显然,现在任何操作中的像素都增加了16倍。
现在,我通常在规格不高,内置图形,4Gb RAM和i3 CPU和HDD(而非SSD)的PC上运行。我已经在具有8GB RAM,i5和SSD的PC上进行了测试,尽管使用了3.XGb RAM,但它似乎主要是CPU密集型程序,即使在性能更好的PC上,我所有内核的利用率也达到了100%。
我的问题是:(具体说明此信息)
如果任何人以前在将4K与OpenCV一起使用方面有任何经验,那也将是有用的信息。
附录A
int main()
{
VideoCapture cap(m_selected_video);
if (!cap.isOpened()) // check if we succeeded
{
std:cout << "Video ERROR";
}
while (_continue)
{
Mat window1;
cap >> window1; // get a new frame from camera
imshow("Window1", window1);
if (waitKey(30) >= 0) break;
}
}
最佳答案
这个问题的答案很有趣,但我认为可以归结为编解码器或视频编码。
我使用的第一个视频是this one(尽管可能不是我使用的确切下载),它似乎在VLC或OpenCV中不能很好地播放,但在Windows Media Player中可以正常播放。我认为这是因为它以MPEG AAC音频编码。
然后,我下载了ht264编码的an elysium 4k trailer,在VLC和OpenCV中都可以正常工作。因此,Hooray 4K在OpenCV中并不是一个整体问题!
所以我认为可能是文件大小。我付款并下载了7Gb 6分钟4K视频。即使在OpenCV和VLC中将其绘制到屏幕三遍,它也不会出现延迟。这是一个.mov文件,我目前无权访问编解码器(执行此操作时请更新此位)。
因此,TL:DR:引起问题的不是文件大小或容器类型,但某些编解码器似乎确实存在问题。这只是一个小探索,可能会有不同的问题。
附录:感谢cornstalks在评论中的帮助,他们指出WMP可能内置了GPU支持,并且可以在VLC中进行任何测试,这非常有帮助
关于c++ - OpenCV和4K视频,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34694310/