【opencv】10.播放视频 以及 设置任意键为暂停键

1.imshow()显示图像帧时暂停键的用法

//严格按照下面这种方式和顺序不会有问题,例如在imshow后面直接跟cv::waitKey(1)后再char c=...会有问题。
cv::namedWindow("light_object", cv::WINDOW_NORMAL);
cv::resizeWindow("light_object", 640, 480);
cv::imshow("light_object", frame);
char c = static_cast<char>(cv::waitKey(50));
if (c == ' ') {
cv::waitKey(0);
}

2.opencv播放视频 以及 设置任意键为暂停键

【该方法不实用,可能会暂停不了,时灵时不灵】
对于cv::VideoCapture的使用可以参考 https://blog.csdn.net/guduruyu/article/details/68486063

cv::Mat img;
std::string videopath="./path/..";
cv::VideoCapture cap;

cap.open(videopath);

if (!cap.isOpened()) {
std::cout << "Can't open the video file!"<<std::endl;
return -1;
}

cap >> img; // 把捕获的帧传送给img。在这一句后面设置暂停键
//cap.read(img); // 这句话和cap >> img等价。
// 设置任意键为暂停键,即暂停捕获视频中的帧
if(cv::waitKey(1)>=0)		//有键盘上的键按下时,该函数返回值>=0;没有键按下时,该函数返回值为-1。cv::waitKey(1)为等待1ms;
   cv::waitKey(0);			//cv::waitKey(0);为一直等待直到有键按下。

// 判断是否图片是否为空,为空说明没有打开video。
if (img.empty()) {
   cap.open(videopath);
}

// 设置任意键暂停
if(cv::waitKey(1)>=0)
cv::waitKey(0);

// 推荐用下面这种方式
// cv::waitkey()中的延迟时间需要根据程序定义,太少了捕捉不到按键,我目前没碰到这种情况,碰到设置再大延时也捕获不到按键的情况。
// cv::waitKey(1)括号中必须填上1或者别的数字,否则会一直等待键盘按下,当键盘某键按下时,会返回该键的ascii码
char key=cv::waitKey(3);
if(key ==32)     //空格键暂停,空格键对应的ascii码是32
    cv::waitKey(0);  
if(key ==9){   //tab键快进30帧,设置不了使用右箭头
    for(int i=0;i<30;i++) //快进30帧
        cap >> img;	//快进多少帧,就把这一句执行多少次
}

【不推荐】使用下面这种方法,因为我在apollo上使用根本捕获不了按键,我目前还不知道是什么原因,必须使用以上方式把cv::waitKey(1)先赋值给一个char变量才行。

if(cv::waitKey(3) ==32)     //空格键暂停
	cv::waitKey(0);  
if(cv::waitKey(3) ==9){   //tab键快进30帧,设置不了使用右箭头
	for(int i=0;i<30;i++) //快进30帧
		cap >> img;		//快进多少帧,就把这一句执行多少次
}

3.当使用imshow显示每一帧画面时,出现卡顿的解决办法

读取每一帧在哪个{}中,imshow()就应该在哪个{}中,必须出现在同等级的{}中,不能出现在他下面的二级{{imshow()}}中。否则,当二级{}不符合条件时,执行不到二级{}里面的imshow()时候,就会出现画面卡顿。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值