gpt4 book ai didi

c++ - 如何在opencv中使用cv::VideoCapture::waitAny()

转载 作者:行者123 更新时间:2023-12-02 16:50:45 26 4
gpt4 key购买 nike

我一直试图找到一种方法来异步检查以查看我使用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微秒),以使相机产生帧,并在此时间段后返回。
如果摄像机准备就绪,它将返回true(并且还将使用就绪摄像机的索引填充 ready_index。由于您只有一个摄像机,因此 vector 将为空或非空)。
也就是说,后端仅使用V4L的 waitAny源仅支持 VideoCapture

关于c++ - 如何在opencv中使用cv::VideoCapture::waitAny(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62609167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com