我查看了这个主题(process video stream from memory buffer),我想在第一个答案中做同样的事情。 我试图创建一个继承自cvCapture_FFMPEG的新类文件,并覆盖“打开”功能。 但是我找不到任何名为“cvCapture_FFMPEG”的类的OpenCV模块。
我假设“cvCapture_FFMPEG”在OpenCV及其API中无处可去。我对吗? 如果是这样,你能告诉我在OpenCV中处理缓冲区的最佳方法吗?
请帮忙。
答案 0 :(得分:0)
正如您所见here,cv::Mat
存在一个构造函数,您可以在其中直接给出表示框架的缓冲区。为什么不尝试在memcpy旁边使用它来在缓冲区有新内容时更新Mat对象的内容?
类似的东西:
/*myBuffer is a void* pointing on your data.
myBufferType is very important as it will give the number of bytes to
be read for each element*/
cv::Mat myImage(height, width, myBufferType, myBuffer);
while(1){
if(myBufferHasBeenUpdated)
std::memcpy(Mat.data, myBuffer, numberOfBytesToCopy);
//Performing some operations on the Mat object
}
编辑:我看到你改变了问题的标题。以下是OpenCV的highgui模块中有关cv::VideoCapture的文档。如果您想直接从文件中读取视频,这是继续进行的最佳方式。但是,如果您想要在内存缓冲区中读取视频,就像您提到的主题一样,我认为没有办法轻松使用它。