这个很简单,没什么好说的。。。这里给出学习手册:
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
谈一下一些小细节,其实官方文档中有提示,注意仔细看应该没问题:
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(Frames per Second)表示帧率,单位Hz,即每秒播放的帧数,一般25~30的帧率在视频看起来会很流畅,在游戏中60~75fps就非常流畅了,太高了并不好,显示屏刷新频率会跟不上而浪费GPU的处理能力,太低了游戏体验会很糟糕...
4.opencv貌似只支持avi格式的视频。
———— ps:简单的封装了一下VideoWriter ————
头文件:img2video.hpp:
#ifndef _IMG_TO_VIDEO_H_ #define _IMG_TO_VIDEO_H_ #include "opencv2/imgcodecs.hpp" #include "opencv2/highgui.hpp" #include "opencv2/videoio.hpp" #include <stdio.h> #include <string.h> #ifndef __cplusplus extern "C" { #endif #ifndef __cplusplus } #endif // __cplusplus using namespace cv; #define BUF_SIZE (32 << 1) int ImageOverlay(char*src, const char*format, const char*dst, int width, int height, size_t start_name, size_t end_name, int fps, int isColor) { char img_name[BUF_SIZE]; char psrc[BUF_SIZE]; strcpy(psrc, src); Mat r; VideoWriter writer(dst, VideoWriter::fourcc('M', 'J', 'P', 'G'), fps, Size(width, height), isColor); if (!writer.isOpened()) { printf("Error at line %d :function VideoWriter ", __LINE__); return -1; } for (size_t i = start_name; i <= end_name; i++) { #ifdef _WIN64 if (sprintf(img_name, "/%I64d.", i) < 0) #else if (sprintf(img_name, "/%lld.", i) < 0) #endif { printf("Error at line %d :function sprintf() ", __LINE__); return -3; } strcat(img_name, format); strcat(src, img_name); printf("%s ", src); r = imread(src); strcpy(src, psrc); if(r.empty()) { printf("Error at line %d :function imread() ", __LINE__); return -4; } waitKey(5); writer.write(r); } printf("加载完成! "); return 0; } #endif // _IMG_TO_VIDEO_H_
测试:
#include "img2video.hpp" #include <iostream> int main() { char src[] = "/home/darkchii/图片"; char format[] = "png"; ImageOverlay(src, format, "/home/darkchii/视频/sg0.avi", 1920, 1080, 2, 6, 6, 1); return 0; }