作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直试图找到一种方法来异步检查以查看我使用videocapture拍摄的下一帧相机是否准备就绪。
我遇到了waitAny(),它被描述为“等待VideoCapture的就绪帧”。
在OpenCV文档中,我没有找到有关如何使用它或用例的有用信息。
我已经在网上搜索了两天,我发现的唯一发现就是如何定义该函数需要的参数(我是c++的新手),我不知道如何填充它们以及它们的用例。
这是文档:https://docs.opencv.org/master/d8/dfe/classcv_1_1VideoCapture.html#ade1c7b8d276fea4d000bc0af0f1017b3
最佳答案
IMO相当普遍的一种方法是使用一对线程-一个线程从VideoCapture
“产生”帧(在循环中调用VideoCapture::read()),另一个实际上使用这些帧(一个“消费者”)。生产者将图像推送到队列(在两个线程之间共享),而消费者将其弹出。
在这种情况下,检查相机是否已产生图像就等于检查队列是否为空。
就其本身而言,VideoCapture
不提供这样的异步API。
就是说,如果您想使用waitAny
,并且只有一台摄像机,则可以执行以下操作:
VideoCapture cap = /* get the VideoCapture object from somewhere */
constexpr int64 kTimeoutNs = 1000;
std::vector<int> ready_index;
cv::Mat image;
if (VideoCapture::waitAny({cap}, ready_index, kTimeoutNs)) {
// Camera was ready; get image.
cap.retrieve(image);
} else {
// Camera was not ready; do something else.
}
在上面,
VideoCapture::waitAny
将等待指定的超时时间(1微秒),以使相机产生帧,并在此时间段后返回。
ready_index
。由于您只有一个摄像机,因此 vector 将为空或非空)。
waitAny
源仅支持
VideoCapture
。
关于c++ - 如何在opencv中使用cv::VideoCapture::waitAny(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62609167/
我是一名优秀的程序员,十分优秀!