我是 Opencv 的初学者。在我的新 opencv 项目中,我必须从相机设备捕获视频帧,并需要将它们提供给 opencv 进行处理,但现在我的相机不工作(硬件问题)。我需要使用从另一个相同类型的相机设备获得的 YUV 文件来测试 opencv 应用程序。 所以我的问题是: 我如何将 YUV 数据提供给 opencv? opencv是否支持YUV数据?
根据我的调查,我知道opencv将捕获的帧转换为Mat格式。那么有没有办法将YUV数据直接转换为Mat对象并提供给opencv进行处理。
我的设备没有任何 MPEG、AVI 等的编解码器
最佳答案
我最近在这里问了一个类似的问题OpenCV capture YUYV from camera without RGB conversion
openCV VideoCapture 对象是捕获视频的最简单方法,但它会自动将帧转换为 BGR 格式。您可以使用 videoCapture.set(CV_CAP_PROP_CONVERT_RGB, false)
禁用此功能由于某些原因,该特定命令不适用于我的相机,所以我被迫使用 V4L2 库来读取帧(这与 videoCapture 使用的库相同)。 V4L2 的示例视频捕获代码:http://linuxtv.org/downloads/v4l-dvb-apis/capture-example.html .然后我将帧存储在 cv::Mat 中进行处理。
您可以在 openCV Mat 中存储任何格式的数据,但某些操作会对数据的格式做出假设。例如 imshow 将假设数据为 BGR 或灰度格式。如果您的数据不是其中一种格式,您的图像就会看起来不对。
关于opencv - 如何给Opencv输入YUV数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27820970/