OpenCV视频捕获抓取和检索
OpenCV Videocapture Grab and Retrieve
我遇到这个问题已经很长时间了,我不确定发生了什么。所以我有一个调用nextFrame
的循环,现在问题在于imshow
实际显示了什么。
我特别希望每次调用cap.grab()
和cap.retrieve()
时都有一个图像,但它似乎在"cap"对象内部有这个缓冲区,所以在获取单个即时图像时,我会在点击图像时获得一个图像序列,然后在3/4帧后获得一个新序列。
如何获得单帧?
cap是VideoCapture对象,maxCount是矢量的大小。
void CamLoop::nextFrame() {
.
.
.
//if first loop fill a vector<Mat> with random Mats from camera
if (firstLoop) {
Mat buff;
cap >> buff;
for(int i = 0; i<(maxCounter); i++) {
buffer.push_back(buff);
}
}
projector.nextCode();
if (!customImages) {
cap.grab();
Mat buff;
cap.retrieve(buff);
//tried this way too
//cap >> buff;
buffer[counter] = buff;
setMouseCallback( "Camera", mouseFunc, this );
imshow("Camera", buffer[counter]);
waitKey(1);
}
.
.
.
counter++;
}
我在Eclipse Mars 上使用Linux Mint Rosa和OpenCV 3.1.0
EDIT问题是VideoCapture有一个缓冲区,请在调试模式下在您自己的计算机上尝试,帧不是实时的,我该如何解决这个问题?
我试过使用
cap.set(CV_CAP_PROP_BUFFERSIZE,1);
但它给了我这个错误。
VIDEOIO ERROR: V4L2: setting property #38 is not supported
也尝试过
cap.set(CV_CAP_PROP_MODE,1);
但它给了我这个错误。
VIDEOIO ERROR: V4L2: setting property #9 is not supported
编辑可能是带有缓冲区的相机,而不是VideoCapture对象本身。
一个缓慢而作弊的修复方法可能是进行
cap.open( *CAMERA_NUM* );
在循环中,这是缓慢的,但它在没有缓冲区的情况下实现了静止图像。
相关文章:
- 为什么这个加载函数只抓取文件中的第一件事?
- 无法使用 OpenCv 3.4.5 从具有C++ dll 的网络摄像机 (rtsp) 中抓取帧
- 如何从日志文件中抓取状态代码?(在 C++ 中)
- DXGI API:AcquireTextFrame()从不抓取更新的图像,始终为空
- 如何从 avi 文件中抓取所有帧 - 如何修改 MS 样本采集卡样本
- 如何抓取指向Qt中弹出对话框的指针,该对话框阻止了QTest中的UI线程
- 为什么抓取窗口标题的代码会导致应用崩溃?
- 用Xcb而不是Xlib抓取像素的颜色
- 如何在C ++(qt)代码中使用python脚本?(网页抓取方面)
- OpenCV 3.2 在抓取时提供选择超时,但 fscyber 可以工作
- 使用 Matrox 进行帧抓取
- C++生产者使用者中,同一使用者线程会抓取所有任务
- 在编译时间之前抓取常数值
- OpenCV + QML(从另一个线程抓取帧)
- OpenCV视频捕获抓取和检索
- 从文本中抓取句子,将所有句子分别存储在某个数据结构中
- 视频抓取不起作用 OpenCV
- 不抓取时的QGraphicsPixmapItem mouseMoveEvent
- 从二进制文件中抓取文本时,为什么 xdg_vtnr=8 是我的结果
- 我如何通过网络浏览器抓取从相机检索到的图像