opencv是利用ffmpeg来对视频进行解码出每一帧,然后来显示的。这里直接给出两个函数,大家调用2个函数就可以实现对视频的帧率的读取和 摄像头帧的获取。
读取视频:
void readVideo(String path)
{
VideoCapture capture(path);
while (true)
{
Mat frame;
capture >> frame;
if (frame.empty()) {
break;
}
int h = frame.rows;
int w = frame.cols;
const char *name = "video";
// 这里定义为0,则窗口图像会随着窗口压缩,为1则不会,若窗口小于图像没,则图像显示不全
cvNamedWindow(name,0);
cvResizeWindow(name, w/2, h/2);
imshow(name, frame);
//等30ms显示下一帧
waitKey(30);
}
}
读取摄像头数据:
void readCameraData()
{
VideoCapture capture(0);
while (true)
{
Mat frame;
capture >> frame;
if (frame.empty()) {
break;
}
int h = frame.rows;
int w = frame.cols;
const char *name = "video";
cvNamedWindow(name, 0);
cvResizeWindow(name, w / 1, h / 1);
imshow(name, frame);
//等30ms显示下一帧
waitKey(30);
}
}
其实摄像头还是视频,主要在于初始化videocampture的时候,传入的参数,若为字符串视频路径,则是读入视频,传入 整数 0 则表示摄像头。