在 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) 打开相机