版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Daker_Huang/article/details/86472018
OpenCV中如何读取一个视频以及打开一个摄像头。
我们还可以获得帧率,一般来说,1s如果能有15帧的话这个视频比较流畅,人眼分辨不出来它是图片。
帧率显示:
在OpenCv中,读取视频时能显示帧率,主要用到的函数是double fps = capture.get(CV_CAP_PROP_FPS);
当然,读取摄像头时这个函数就不管用了。
视频写入:
我们对从摄像头获取的视频,将它写入到本地路径中,主要用VideoWriter
这个类。具体写法为:VideoWriter videowrite = VideoWriter("D:/test/vw.avi", -1, 15, size,true);
其中,"D:/test/vw.avi"为存放路径,-1表示自动编码,15表示帧率,size表示窗口大小,true表示彩色视频,如果为false,则是灰色视频。
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
VideoCapture capture(0);//打开摄像头
//VideoCapture capture;
//capture.open("D:/test/vw.avi");
Mat frame, gray;
if (!capture.isOpened())
{
printf("摄像图未读取到...");
return -1;
}
double fps = capture.get(CV_CAP_PROP_FPS);
Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
VideoWriter videowrite = VideoWriter("D:/test/vw.avi", -1, 15, size,true);
printf("FPS:%f\n", fps);
//定义的Mat,String等不要写在while中,这样会浪费资源,增加cpu计算时间
while (capture.read(frame))
{
flip(frame, frame, 1);//镜头左右调换
imshow("video", frame);
videowrite.write(frame);//视频写入
char c = waitKey(50);
if (c == 27)
{
break;
}
}
waitKey(0);
return 0;
}
}