这个很简单,没什么好说的。。。这里给出学习手册:
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
#include
#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\\n", \_\_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()\n", __LINE__);
return -3;
}
strcat(img\_name, format);
strcat(src, img\_name);
printf("%s\\n", src);
r = imread(src);
strcpy(src, psrc);
if(r.empty()) { printf("Error at line %d :function imread()\\n", \_\_LINE\_\_); return -4; }
waitKey(5);
writer.write(r);
}
printf("加载完成!\\n");
return 0;
}
#endif // _IMG_TO_VIDEO_H_
测试:
#include "img2video.hpp"
#include
int main()
{
char src[] = "/home/darkchii/图片";
char format[] = "png";
ImageOverlay(src, format, "/home/darkchii/视频/sg0.avi", 1920, 1080, 2, 6, 6, 1);
return 0;
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章