OpenCV 摄像头与视频读取并显示

时间:2022-07-22
本文章向大家介绍OpenCV 摄像头与视频读取并显示,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

摄像头与视频读取并显示

相关函数说明

保存图像信息的结构体
  • 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 参考程序

#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 参考程序

#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