www.1862.net > 基于OpEnCV C++写了一个截屏程序,但是当视频总帧数为截屏间隔整数倍时候 死循环

基于OpEnCV C++写了一个截屏程序,但是当视频总帧数为截屏间隔整数倍时候 死循环

for (int i = 0; i < fpsNum; i++) { frame = cvQueryFrame(capture); if (!frame)break; flag = i; } 问题出在这里 if (!frame)break; 这个break只是中断了for循环 当i为0,即刚进入for循环,视频就达到了最后一帧,则flag还没有在此次for循环赋值就跳

你这个都算是个小项目了,到威客发个任务,花点钱吧.

那个你随便等待多久都行,33毫秒比较接近正常播放画面吧.

首先不说其他的,你这个程序本身写的就有问题,你自己写的 int Devideo()//视频处理函数:拍摄好的视频,根据所选择的帧间隔,按照固定的命名方式截图这个函数你都没有在main函数之前声明你怎么可以调用它了

你把图像数据倒一下输入就可以了.就是把原来的数据顺序整个颠倒一下.

打开一个avi文件相当容易..但是你后面那个要求就比较有难度了.. 你可以使用 camshift 或者 TrackerBlob那6个模块来实现.. cvCaptureFromCAM函数从摄像头采集 cvCaptureFromAVI函数从指定路径打开媒体文件 打开媒体文件后需要调用函数cvQueryFrame一帧一帧的来显示..

实际上在你获取摄像机的时候就能获取到摄像机的硬件帧率.比如摄像机是30帧每秒的,你就不能录指出60帧每秒的视频了.如果要调整到更低帧率的话,直接把你需要的帧率与摄像机的帧率做一下计算,就能得到“每获得多少帧需要丢弃1帧”.比如你是用30帧每秒的摄像机,但需要15帧每秒的视频,那就每获得2帧丢弃1帧就行了.变为25帧就可以每获得6帧丢弃1帧.

你可以先把视频存为图片,第二个视频的图片名字接着第一个的来,把所有的图片放到一个文件夹里,然后再将这些图片转为视频.当然了这样有些麻烦.

import cv2import time# .time()方法用来记录当前时间start_time = time.time()# 导入一个本地视频赋给capcap = cv2.VideoCapture("D:/UserData/Desktop/ad.mp4")# 获取视频的帧速率fpsfps = int(cap.get(cv2.CAP_PROP_FPS))# 获取视频

相关搜索:

网站地图

All rights reserved Powered by www.1862.net

copyright ©right 2010-2021。
www.1862.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com