我VideoCapture在 OpenCV 中有一个,我可以成功显示给定的视频。我现在想要做的是通过按下一个键来暂停和播放(只要它有效,就可以选择哪个)。我一直在阅读有关waitKey这整个事情的一些内容(ASCII)以及如何绑定密钥。据我了解它是用来让highgui进程但也可以用于其他目的?
如果很难/不可能暂停视频并重新开始,我会很高兴按下键时的延迟。
非常感谢帮助!
参考OpenCV的文档的cv::waitKey(delay)时候delay <= 0会造成功能无限等待关键事件。
这是一个示例 Python 脚本,用于显示从计算机的网络摄像头捕获的帧。当q按下时,退出循环。但是,如果p按下 ,则显示暂停,直到按下任何其他键:
import cv2
cap = cv2.VideoCapture(0) # getting video from webcam
while cap.isOpened():
ret, img = cap.read()
cv2.imshow("Frame",img)
key = cv2.waitKey(1)
if key == ord('q'):
break
if key == ord('p'):
cv2.waitKey(-1) #wait until any key is pressed
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
您不需要诸如绑定密钥之类的任何东西。我编写了一个示例代码,每当您按“p”时就会播放/暂停视频。
#include <iostream>
#include <fstream>
#include <string>
#include "opencv2/opencv_modules.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{
bool playVideo = true;
VideoCapture cap(argv[1]);
if(!cap.isOpened())
{
cout<<"Unable to open video "<<argv[1]<<"\n";
return 0;
}
Mat frame;
while(1)
{
if(playVideo)
cap >> frame;
if(frame.empty())
{
cout<<"Empty Frame\n";
return 0;
}
imshow("Video",frame);
char key = waitKey(5);
if(key == 'p')
playVideo = !playVideo;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15707 次 |
| 最近记录: |