使用 OpenCV 将视频帧读取到指定的指针(C++)

Posted

技术标签:

【中文标题】使用 OpenCV 将视频帧读取到指定的指针(C++)【英文标题】:Read video frame with OpenCV to specified pointer (C++) 【发布时间】:2018-05-08 22:35:46 【问题描述】:

有没有办法通过 videocapture 读取视频帧并指定它应该在内存中的位置?假设我有一个指针 char *p 并且已经为帧预分配了正确的内存量,我可以在帧中读取 p 的地址吗?

【问题讨论】:

【参考方案1】:

cv::Mat 旨在自动处理图像的内存管理,但它也可以与外部分配的缓冲区一起使用。为此,请将指向外部缓冲区的指针传递给Mat constructor。

确保缓冲区大小、Mat 大小和类型(通道、深度等)与 VideoCapture 的输出相匹配。

例子:

unsigned char *data; // Points to buffer of appropriate size.
cv::VideoCapture cap; // A valid capture

// This only allocates the Mat header with a reference to "data"
cv::Mat frame 
    rows,
    cols,
    CV_8UC3, // image type, here 3-channel, 8 bits per channel, unsigned
    data
;
cap >> frame;  // Image data stored into buffer at "data"

【讨论】:

更改: => ()

以上是关于使用 OpenCV 将视频帧读取到指定的指针(C++)的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频

无法使用videoCapture opencv打开视频

opencv读取ENVI标准格式

如何使用 OpenCV 和 Python 在视频流中逐帧处理视频图像

如何从 OpenCV 中的 YUV 文件中读取帧?

OpenCV从文本文件创建视频