摄像头与视频读取并显示
相关函数说明
保存图像信息的结构体
- opencv2:
CvCapture
,操作采用指针。 - opencv3:
VideoCapture
,操作采用变量。
打开到函数
- opencv2:
cvCreateCameraCapture(-1)
读入摄像头视频,cvCreateFileCapture("路径")
读入视频文件。 - opencv3:open一个函数搞定,文件和摄像头是不同的重载函数。
读取视频流的形式:
- opencv2:
cvQueryFrame(capture)
- opencv3:
<<
,经过重载到operate函数。
图像显示:
- opencv2:在main一开头声明窗口:
cvNamedWindow
,后面用cvShowImage
函数显示 - opencv3:
imshow
全部搞定。当然,cvNamedWindow
也有它到代替品:namedWindow()
;
控制帧率
- opencv2:
cvWaitKey
- opencv3:
waitKey
释放保存图像信息到结构体
- opencv2:
cvReleaseCapture()
函数 - opencv3:作为一个变量,显然是由系统释放到,完全不需要管。不过严谨起见,也可以加上一行
capture.release()
;
OpenCV3 参考程序
代码语言:javascript复制#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char **argv)
{
//VideoCapture capture(0); //// 从摄像头读入视频
VideoCapture capture("test.mp4"); //从本地读入视频
namedWindow("my vidio",CV_WINDOW_AUTOSIZE);
//循环显示每一帧
while(capture.isOpened())
{
Mat frame; //定义一个Mat变量,用于存储每一帧的图像
capture>>frame; //读取摄像头当前帧并传给frame
/*中间可以处理摄像头当前帧的图像*/
imshow("my vidio",frame); //显示当前帧
if(waitKey(40) == 27){
break; //按ESC就退出
}
}
capture.release();
cv::destroyAllWindows();
return 0;
}
OpenCV2 参考程序
代码语言:javascript复制#include <QCoreApplication>
#include <cv.hpp>
#include <highgui.h>
#include <video.hpp>
using namespace cv;
int main(int argc, char *argv[])
{
cvNamedWindow("mp4");
/*CvCapture结构体,保存图像信息,cvCreateCameraCapture(-1)读入摄像头视频,
* cvCreateFileCapture("路径")读入视频文件*/
CvCapture * capture=cvCreateCameraCapture(-1);
IplImage* frame;
while(1)
{
//cvQueryFrame(),读入CvCapture结构体指针,将下一帧加载到内存
frame=cvQueryFrame(capture);
if(!frame)
break;
//cvShowImage()在窗口中显示
cvShowImage("mp4",frame);
//cvWaitKey()触发按键、控制帧率
char c =cvWaitKey(33);
if(c==27)
break;
}
//cvReleaseCapture()释放结构体指针
cvReleaseCapture(&capture);
}
参考
[比较opencv2、opencv3关于读取视频文件、摄像头的编程风格]https://blog.csdn.net/qq_34917736/article/details/77427596