OpenCV "stuck" 帧与视频捕获
OpenCV "stuck" frames with VideoCapture
我使用的是OpenCV 3.1,我试着运行一个简单的代码作为以下一个(主函数):
cv::VideoCapture cam;
cv::Mat matTestingNumbers;
cam.open(0);
if (!cam.isOpened()) { printf("--(!)Error opening video capturen"); return -1; }
while (cam.read(matTestingNumbers))
{
cv::imshow("matTestingNumbers", matTestingNumbers);
cv::waitKey(5000);
}
当我移动相机时,代码似乎没有捕获并显示当前帧,而是显示从前一个位置捕获的所有帧,然后才显示从新位置捕获的帧。
所以当我捕捉到墙时,它会以正确的延迟显示正确的帧(墙本身),但是,当我把相机扭到我的电脑上时,我首先看到大约3帧墙,然后才看到电脑,似乎帧被卡住了。
我尝试使用videoccapture .set()函数并将FPS设置为1,我尝试将捕获方法切换到cam>> matTestingNumbers(以及根据此更改的其余主要函数),但没有任何帮助,我仍然"卡住"帧。
顺便说一下,这些是我在网上找到的解决方案。
我能做些什么来解决这个问题?
谢谢你,丹。 编辑:我试图检索帧如下:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame;
namedWindow("edges",1);
for(;;)
{
cap.grab();
if (waitKey(11) >= 0)
{
cap.retrieve(frame);
imshow("edges", frame);
}
}
return 0;
}
但是,它给出了结果(当我把相机对准一个点并按下一个键时,它会显示另一个点捕获的先前帧)。
这就像你试图描绘一个人然后另一个人,但是当你描绘第二个人的时候,你得到的是第一个人的照片,这是没有意义的。
然后,我尝试了以下操作:
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
Mat frame;
namedWindow("edges",1);
for(;;)
{
cap >> frame;
if (waitKey(33) >= 0)
imshow("edges", frame);
}
return 0;
}
效果如预期
其中一个问题是,您没有调用cv::waitKey(X)
来正确冻结窗口X毫秒数。去掉usleep()
相关文章:
- 如何在c++中录制具有精确帧时间戳的视频
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何使用OpenCV-C++编写*.mp4视频?
- 开放 CV 中的动态内存分配,用于视频处理
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- OpenCV QT,显示视频的帧(不使用while循环)
- FFmpeg——使用硬件加速进行视频解码
- 在 openCV 中手动停止视频
- 强制Qt相机视频格式
- 在macOS Mojave上尝试OpenCV视频捕获时"Abort Trap: 6"
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 如何在 c++ 中通过 http 发送大型视频文件?
- 在 QLabel 中显示视频
- OpenGL 调试上下文警告 -"将使用视频内存作为缓冲区异议的来源
- 这个工厂类在这个C++视频中的意义何在?
- 如何使用Qt在新窗口中显示视频帧
- Qt GUI使用Qfiledialogbox和qlabel显示视频,这是我的代码
- 如何OPENCV+CUDA+视频捕获?
- OpenCV "stuck" 帧与视频捕获