我正在尝试使用 OpenCV 2.4.3 编写 .avi 视频。我要做的是:
- 加载 .avi 视频
- 在每一帧上做一些事情,最终丢弃其中一些
- 保存新视频
基本上,我所做的是:
- 使用人脸检测器并找到人脸
- 如果未检测到人脸,则跳过该帧
- 如果有脸,在每个脸上画一个矩形,然后在上面放一些文字
代码如下所示(跳过不涉及Mat alt
框架的主要阐述部分):
VideoCapture cam("1.avi");
VideoWriter writer("1_det.avi",
cam.get(CV_CAP_PROP_FOURCC),
cam.get(CV_CAP_PROP_FPS),
cv::Size(cam.get(CV_CAP_PROP_FRAME_WIDTH),
cam.get(CV_CAP_PROP_FRAME_HEIGHT)));
while(cam.read(image2.img)) {
Mat alt = image2.img.clone();
// finds faces, then:
if(faces.size()==0) {
for(int k=0;k<5;k++) cam.read(alt);
continue;
}
for(int f=0;f<faces.size();++f) {
// do some stuff here, then draw some results:
putText(alt, ss.str(), Point(faces[f].x,faces[f].y), FONT_HERSHEY_SCRIPT_SIMPLEX, 1, Scalar::all(255), 1);
rectangle(alt, Point(faces[f].x,faces[f].y), Point(faces[f].x+faces[f].width,faces[f].y+faces[f].height), colors[f] , 3, 8, 0 );
}
writer << alt;
}
现在,由于我丢弃了大量帧,我想以较低的 FPS 保存视频,cam.get(CV_CAP_PROP_FPS)/2
但是如果我尝试做类似的事情,视频会在整个持续时间内一遍又一遍地显示第一帧的视频(虽然这是正确的)。
我对视频有什么大的遗漏吗..?
任何输入将不胜感激。谢谢