首页 > MachineLearning > OpenCV图像和视频的输入输出

OpenCV图像和视频的输入输出

视频的输入输出与参数控制方法

  openCV提供VideoCapture类来读取视频文件和USB摄像头中的图像帧,可以直接通过构造函数

VideoCapture::VideoCapture(const string& filename)
VideoCapture::VideoCapture(int device)

  来初始化一个视频读取类,或者初始化VideoCapture之后,通过

bool VideoCapture::open(const string& filename)
bool VideoCapture::open(int device)

来打开一个视频。

  打开视频之后,通过

 bool VideoCapture::isOpened()

函数来检测视频是否成功的打开。
  获取视频文件或设备的下一帧用

 bool VideoCapture::grab()

函数。
  解码并返回获取的那一帧用

 bool VideoCapture::retrieve(Mat& image, int channel=0) 

函数
  以上两步合并起来操作用

 bool VideoCapture::read(Mat& image) 

或者直接用 操作符号 >> 来完成。
  还有通过Get和Set方法,获取或者设置一些其他的属性。

openCV提供 VideoWriter 类来输出视频文件。

  通过构造方法

VideoWriter::VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)

来构造一个VideoWriter类。

bool VideoWriter::open(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)

  用来打开一个视频文件

bool VideoWriter::isOpened()

  检测视频是否成功的打开。
  用

void VideoWriter::write(const Mat& image)

或者 操作符号 << 来写入一个frame

图像的输入输出

Mat imdecode(InputArray buf, int flags) 

读取一个图片到内存中

bool imencode(const string& ext, InputArray img, vector<uchar>& buf, const vector<int>& params=vector<int>())

解码一个图片到内存缓存区

Mat imread(const string& filename, int flags=1 )

读取一个图像文件

bool imwrite(const string& filename, InputArray image, const vector<int>& params=vector<int>())

保存一个图像到指定的文件
  最后放上一段demo代码。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace cv;

int main(int, char**)
{
    cv::VideoCapture cap(0); // 打开相机
    cap.set(CV_CAP_PROP_FRAME_WIDTH,640);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT,480);
    if(!cap.isOpened())  // 检查是否打开成功
        return -1;
    
    VideoWriter writer("VideoTest.mp4", CV_FOURCC('D', 'I', 'V', '3'), 25.0, Size(640, 480),true);
    if (!writer.isOpened()) {
        return -2; // 检查是否打开成功
    }
    
    Mat edges;
    namedWindow("edges",1);
    for(;;)
    {
        Mat frame;
        cap >> frame;
        imshow("edges", frame);
        writer << frame;
        if(waitKey(30) >= 0) break;
    }
    writer.release();
    cap.release();
    return 0;
}

参考资料:http://www.opencv.org.cn/opencvdoc/2.3.2/html/modules/highgui/doc/reading_and_writing_images_and_video.html

转载请注明: 转载自阿凡树的博客

本文链接地址: OpenCV图像和视频的输入输出

  1. 还没有评论
评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks