在 open cv 中进行 videoCapture 后应用程序没有响应

Posted

技术标签:

【中文标题】在 open cv 中进行 videoCapture 后应用程序没有响应【英文标题】:Application not responding after videoCapture in open cv 【发布时间】:2018-10-05 10:16:49 【问题描述】:

我在带有 C++ 的 ubuntu 中使用 Qt。 我正在openCV 中使用VideoCapture 阅读视频。 但是在打开视频容器后,我的应用程序没有响应。

char filename[50];
VideoCapture cap;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)


ui->setupUi(this);
sprintf(filename,"/media/sf_Shared_with_VM/helicopter_with_stickers.mp4");
cap.open(filename);
printf("\nFile Opened");

此处文件已打开,但未打印“文件已打开”。

它是一个大程序的一部分,点击按钮,我必须录制原始视频和覆盖视频。视频显示和存储工作正常。但是当我按下“记录原始”按钮时,我想打印“原始记录”,其他按钮也是如此。但是除非我按两次或按另一个按钮,否则它不会被打印出来,即按一个按钮后它会响应。我将它调试到cap.open(filename);,因为在那之后我无法打印“文件打开”。

【问题讨论】:

你的 filename 是一个字符缓冲区还是 QString ?您应该使用 QString 格式函数而不是 sprintf。如果filename 是一个字符缓冲区,你使用了错误的 sprintf 格式,它应该是 sprintf(filename, "%s", "your file ...."); 谢谢,它对我的​​问题有什么帮助? 您使用 sprintf 的方式没有任何问题。你当然可以用char filename[] = "path to your file" 替换它。 另外请注意,由于您没有在printf("\nFile Opened"); 之后刷新输出 - 您不能说这行代码是否已执行。将其替换为printf("\nFile Opened\n") 或在该行之后添加fflush(stdout) 您是否尝试使用doc.qt.io/qt-5/qdebug.html 打印结果? 【参考方案1】:

您看不到最后一条日志消息,因为您没有刷新标准输出流。

您可以通过在消息printf("\nFile Opened\n") 之后添加换行符或在最后一个printf 之后显式调用fflush(stdout) 来实现。

【讨论】:

以上是关于在 open cv 中进行 videoCapture 后应用程序没有响应的主要内容,如果未能解决你的问题,请参考以下文章

对opencv读取的图片进行像素调整(1080, 1920) 1.cv2.VideoCapture(构造图片读取) 2.cv2.nameWindow(构建视频显示的窗口) 3.cv2.setWindo

cv2.videoCapture.release() 是啥意思?

OpenCV笔记:cv2.VideoCapture 完成视频的跳帧输出操作

无法在 Android 手机中使用 cv2.VideoCapture(0) 打开相机

cv::VideoCapture 在 C# 项目中从 DLL 使用时不会打开文件或流

Opencv VideoCapture 在 Heroku 上总是返回 false