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

本文档是关于OpenCV2编程手册的笔记,重点介绍如何创建一个名为VideoProcess的类来处理视频帧。通过定义视频、帧、处理结果和延迟等属性,以及获取视频、运行帧、处理帧和显示图像的方法,实现了视频处理的简洁组织。这种方法能有效减少主函数的代码,提高程序的清晰度。
摘要由CSDN通过智能技术生成

    对视频的处理其实很简单,就是对图像的处理,但我们要让对视频的处理看着十分清晰,不会造成混乱的感觉,就要定义一个视频处理的类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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值