比较opencv2、opencv3关于读取视频文件、摄像头的编程风格

(开发环境:ubuntu 16.04+opencv3.1.0+qt5)

入门opencv首先了解下读取视频文件、摄像头的编程风格

opencv2、opencv3对此最基本到区别莫过于操作图像矩阵的不同:

opencv2采用到是IplImage指针;opencv3采用的是Mat矩阵。

先上代码:

opencv2风格:

#include 
#include 
#include 
#include 

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);
}
opencv3风格:

#include 
#include 
#include 
#include 

using namespace cv;

int main(int argc, char *argv[])
{
    /*VideoCapture结构体,保存图像信息,open()参数为int index(0为默认摄像头),读入摄像头视频,
     *                           open()参数为路径,读入视频文件*/
    VideoCapture capture;
    capture.open(0);
    Mat frame;

    double rate = capture.get(CV_CAP_PROP_FPS); //获取视频文件的帧率
    int delay = cvRound(1000.000 / rate);       //延时参数

    while(1)
    {
        /*采用>>的方式读入视频*/
        capture >> frame;
        if(frame.empty())
            break;

        /*imshow()在窗口中显示*/
        imshow("读取摄像头",frame);
        /*WaitKey()控制帧率*/
        waitKey(delay);
    }
}

区别:

1、保存图像信息的结构体:

opencv2:CvCapture,操作清一色指针。

opencv3:VideoCapture,操作清一色变量。

2、打开到函数:

opencv2:cvCreateCameraCapture(-1)读入摄像头视频,

                       cvCreateFileCapture("路径")读入视频文件。

opencv3:open一个函数搞定,文件和摄像头是不同的重载函数。

3、IplImage指针、Mat变量

4、读取视频流的形式:

opencv2:cvQueryFrame(capture)

opencv3:<<,经过重载到operate函数。

5、图像显示:

opencv2:在main一开头声明窗口:cvNamedWindow,后面用cvShowImage函数显示

opencv3:imshow全部搞定,美滋滋。当然,cvNamedWindow也有它到代替品:namedWindow();

6、控制帧率

opencv2:cvWaitKey

opencv3:waitKey

7、释放保存图像信息到结构体

opencv2:cvReleaseCapture()函数

opencv3:作为一个变量,显然是由系统释放到,完全不需要管。不过严谨起见,也可以加上一行capture.release();



你可能感兴趣的:(Qt,opencv)