OpenCV学习 —— 图片集合成视频

  这个很简单,没什么好说的。。。这里给出学习手册:

  1.官方教程:https://docs.opencv.org

  2.这个是一些video相关的API参考:https://docs.opencv.org/trunk/dd/d9e/classcv_1_1VideoWriter.html

  3.一个简单的例子实现将图片集合成视频:https://docs.opencv.org/trunk/d5/d57/videowriter_basic_8cpp-example.html#a5

  我的测试代码:

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>
#define BUF_SIZE 0xffff
using namespace cv;

using std::cin;
using std::cout;
using std::endl;

int main(int argc, char*argv[])
{
   Mat src;
	int fps = 10;
	char img[BUF_SIZE] = "/home/darkchii/图片/sg0_2.png";

	src = imread(img);
	if( src.empty() ) { cout << "Error loading src" << endl; return -1; }
	VideoWriter writer("/home/darkchii/视频/sg0.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), fps,
                        src.size());
	if (!writer.isOpened()) { cout << "Error write" << endl; return -1; }
	for (int i = 2; i < 7; i++)
	{
		if (sprintf(img, "/home/darkchii/图片/sg0_%d.png", i) < 0) { cout << "Error img buf" << endl;return -1; }
	   src = imread(img);
	   if( src.empty() ) { cout << "Error loading src" << endl; return -1; }
	   // imshow("sg0", src);
	   waitKey(5);
		writer.write(src);
	}
   return 0;
}

  谈一下一些小细节,其实官方文档中有提示,注意仔细看应该没问题:

    1.注意图像尺寸,要合成的每一张图片规格必须一致。

    2.注意图像RGB值,如果是jpg/png这样的,则默认打开3个通道(RGB),imread()中有一个省缺参数isColor默认为true,如果图片是灰度图像,应将isColor设置为false。参考:https://blog.csdn.net/yang_xian521/article/details/7440190(看评论)、https://docs.opencv.org/master/d5/d98/tutorial_mat_operations.html

    3.fps表示帧率,即每秒播放的帧数,一般25~40的帧率在视频、游戏中动作等就看起来很流畅,太高了并不好,显示屏刷新频率会跟不上而浪费GPU的使用,太低了会很卡...

    4.opencv貌似只支持avi格式的视频。

猜你喜欢

转载自www.cnblogs.com/darkchii/p/9142472.html