OpenCV2编程手册笔记之 10.3处理视频帧

来源:互联网 发布:优酷客户端for mac 编辑:程序博客网 时间:2024/05/19 04:56

    对视频的处理其实很简单,就是对图像的处理,但我们要让对视频的处理看着十分清晰,不会造成混乱的感觉,就要定义一个视频处理的类VideoProcess

    在这个类中,我们要定义视频,视频中的帧,处理后的结果,视频的延迟作为类的属性

    定义获得视频,运行视频帧,帧处理,显示图像的方法

class VideoProcess{private:double delay;cv::Mat Frame;cv::Mat Result;cv::VideoCapture capture;public:void get_capture(std::string name);void run();cv::Mat process(cv::Mat &img, cv::Mat &out);void display(cv::Mat &Frame, cv::Mat Result);};
    之后,我们就可以按照

    读取视频——>运行视频帧——>处理视频帧——>显示图像进行类中每个方法的编写。

    这样做的好处最明显的就是可以极大的减少主函数的代码量,使得程序更加简介清楚。

源代码:

//VideoProcess视频处理类#pragma once#include "stdafx.h"#include <opencv2\opencv.hpp>class VideoProcess{private:double delay;cv::Mat Frame;cv::Mat Result;cv::VideoCapture capture;public:void get_capture(std::string name);void run();cv::Mat process(cv::Mat &img, cv::Mat &out);void display(cv::Mat &Frame, cv::Mat Result);};

//类的方法#include "stdafx.h"#include "VideoProcess.h"void VideoProcess::get_capture(std::string name){capture.open(name);if (!capture.isOpened()){std::cout << "打开失败" << std::endl;}int rate = capture.get(CV_CAP_PROP_FPS);delay = 1000 / rate;}void VideoProcess::run(){while (capture.read(Frame)){Result = process(Frame, Result);display(Frame, Result);}}cv::Mat VideoProcess::process(cv::Mat &img, cv::Mat &out){cv::cvtColor(img, out, cv::COLOR_RGB2GRAY);cv::Canny(out, out, 100, 200);return out;}void VideoProcess::display(cv::Mat &Frame, cv::Mat Result){cv::imshow("Before", Frame);cv::imshow("After", Result);cv::waitKey(delay);}

//主函数#include "stdafx.h"#include <opencv2\opencv.hpp>#include "VideoProcess.h"int main(){VideoProcess process;std::string name;std::cin >> name;process.get_capture(name);process.run();    return 0;}


阅读全文
0 0