C++ 使用OpenCV捕获图像,而不是视频
我正在使用OpenCV4从相机读取数据。类似于网络摄像头。非常好,代码有点像这样:C++ 使用OpenCV捕获图像,而不是视频,c++,linux,opencv,webcam,v4l2,C++,Linux,Opencv,Webcam,V4l2,我正在使用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 t
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那样只流式播放视频?这能回答你的问题吗:不,我昨晚确实看到了那张照片,并试过了,但它不能解决问题。OpenCV问题列表上还有其他来自不同人士的帖子,这些帖子似乎只针对某些相机实现了该属性,并不适用于所有人。(在我的例子中,我使用的是OpenCV v4.2.0。)在另一个线程中流式传输视频,并从主线程调用图像-这有帮助吗?