opencv3.0.0 处理视频

视频也是由一帧帧图片组成的,对视频的处理实质上还是对于图片的处理,opencv中可以很容易从视频中获得一帧图像,从而经过处理,达到处理整个视频的效果。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;


int main() 
{

  cv::VideoCapture cap;

  cap.open(string("testvideo.mp4"));
  double fps = cap.get(CV_CAP_PROP_FPS);
  cv::Size size(
	  (int)cap.get(CV_CAP_PROP_FRAME_WIDTH),
	  (int)cap.get(CV_CAP_PROP_FRAME_HEIGHT)
	  );


  cv::Mat frame;
  cv::Mat out;

  cv::VideoWriter writer;
  writer.open("F:\\ebook\\opencv\\LearningOpenCV3\\test\\test\\result.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);

  for(;;) {

    cap >> frame;

    if( frame.empty() ) break; // Ran out of film

	cv::Mat frame_gray;
	
	cv::cvtColor(frame, frame_gray, cv::COLOR_BGR2GRAY);
	cv::Canny(frame_gray, out, 10, 150, 3, true);
    cv::imshow( "process", out );

	writer << out;    //保存处理后的图像

    if( (char)cv::waitKey(30) >= 0 ) break;

  }

  cap.release();
  writer.release();

  return 0;

}

程序运行中出现了一个问题,出现异常中断,但是确认代码无误,提示信息如下:

Unhandled exception at 0x76EFC54F in test.exe: Microsoft C++ exception: cv::Exception at memory location 0x003DF954.

多上述程序多了一些修改,程序如下:

#include <opencv.hpp>
#include <iostream>

using namespace std;


int main()
{

	cv::VideoCapture cap;

	cap.open(string("testvideo.mp4"));
	if (!cap.isOpened())
	{
		cout<<("视频打开出错!")<<endl;
		return -1;
	}

	double fps = cap.get(CV_CAP_PROP_FPS);
	cv::Size size(
		(int)cap.get(CV_CAP_PROP_FRAME_WIDTH),
		(int)cap.get(CV_CAP_PROP_FRAME_HEIGHT)
		);


	cv::Mat frame;
	cv::Mat out;

	cv::VideoWriter writer;
	writer.open("F:\\ebook\\opencv\\LearningOpenCV3\\test\\test\\result.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size);
	if (!writer.isOpened())
	{
		cout << ("创建视频出错!") << endl;
		return -2;
	}
	
	for (;;) {

		cap >> frame;

		if (frame.empty()) break; // Ran out of film

		cv::Mat frame_gray;

		cv::cvtColor(frame, frame_gray, cv::COLOR_BGR2GRAY);
		cv::Canny(frame_gray, out, 10, 150, 3, true);
		cv::imshow("process", out);

		

    writer << out;    //保存处理后的图像

		if ((char)cv::waitKey(30) >= 0) break;

	}

	cap.release();
	writer.release();

	return 0;

}

异常还是存在,提示信息如下:

Unhandled exception at 0x76A6C54F in test.exe: Microsoft C++ exception: cv::Exception at memory location 0x0045F9E8.

单步执行,出错代码为:

writer << out;    //保存处理后的图像

猜你喜欢

转载自blog.csdn.net/qq_34662299/article/details/83860779
今日推荐