c++ - 使用 OpenCV 捕获图像,而不是视频
问题描述
我正在使用 OpenCV4 从相机中读取数据。类似于网络摄像头。效果很好,代码有点像这样:
cv::VideoCapture cap(0);
cap.set(cv::CAP_PROP_FRAME_WIDTH , 1600);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 1200);
while (true)
{
cv::Mat mat;
// wait for some external event here so I know it is time to take a picture...
cap >> mat;
process_image(mat);
}
问题是,这提供了许多视频帧,而不是单个图像。这很重要,因为在我的情况下,我不想也不需要处理 30 FPS。我实际上有特定的物理事件触发在某些时候从相机读取图像。因为 OpenCV 期望调用者想要视频——考虑到这个类被调用,这并不奇怪cv::VideoCapture
——它已经缓冲了很多秒的帧。
我在图像中看到的总是几秒钟前的。
所以我的问题:
- 有没有办法刷新 OpenCV 缓冲区?
- 或者告诉 OpenCV 放弃输入,直到我告诉它拍摄另一张图像?
- 或者获取最新的图像而不是最旧的图像?
我正在考虑调查的另一个选项是直接使用 V4L2 而不是 OpenCV。这会让我拍单张照片还是只像 OpenCV 这样流式传输视频?
解决方案
推荐阅读
- nginx - 如何将传入请求转发到主机上的 80 端口到 x 端口,其中 x 是传入请求参数
- azure - Powershell GUI 按钮垂直排列
- python - 产量和产量——你能把它们结合起来吗?
- azure - 如何在 Azure 中创建多个不同规格的 VM
- c# - 试图移动太空入侵者但无法双向移动
- r - 使用 dplyr 根据 R 中数据的条件创建新列
- google-analytics - 字段是否有任何无效字符?
- autofac - Autofac.Extensions.Hosting NuGet?
- css - 如果找不到第一个类名,如何回退到另一个类名?
- html - 如何在 Markdown 中保留(或强制)对整个文本文档的格式?