这个很简单,没什么好说的。。。这里给出学习手册:
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格式的视频。
原文地址:https://www.cnblogs.com/darkchii/p/9142472.html
时间: 2024-10-02 04:48:31