C++
一.视频转图像 (保存每一帧)
可参考:https://www.cnblogs.com/miaojinmin799/p/6845462.html
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(){
VideoCapture cap("D:/1.wmv"); //读入视频
Mat img; //图像变量
char image[20]; //保存路径
int i = 0; //图像计数
while (cap.read(img)) //读取视频帧
{
sprintf(image, "%s%d%s", "..\\image", i++, ".jpg"); //指定保存路径
imwrite(image, img); //保存图像
}
}
结果展示:
二。图片 转 视频 (该方法,生成视频会卡)
1. 首先将本地图像的路径保存成 .txt文件
参考我的博客:https://blog.csdn.net/wgf5845201314/article/details/78404756?locationNum=9&fps=1
2. 利用 .txt 生成视频
//#include "stdafx.h"
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <string>
#include <fstream>
using namespace std;
int main()
{
cout << "*********************开始图像转换为视频*********************" << endl;
string imagepath("C:\\Users\\jingling\\Desktop\\TCP图像传输_C++\\client\\clent\\list.txt");
int m = imagepath.find_last_of('.');
string avipath = imagepath.substr(0, m) + ".avi";
ifstream File;
File.open(imagepath);
if (!File.is_open())
{
cout << "图像无法读取,请检查图像路径是否有误!" << endl;
return -1;
}
string imageName;
int height;
int width;
double rate;
cout << "请输入帧率:";
cin >> rate;
cout << "请输入图像的宽度:";
cin >> width;
cout << "请输入图像的高度:";
cin >> height;
cout << "请输入图像是否为彩色,是输入1,不是则输入0! ";
int e;
bool color = true;
cin >> e;
if (e == 0)
{
color = false;
}
cv::VideoWriter writer;
writer.open(avipath, CV_FOURCC('M', 'J', 'P', 'G'), rate, cv::Size(width, height), color);
if (!writer.isOpened())
{
cout << "Could not open the writer for write!" << endl;
return -1;
}
while (getline(File, imageName))
{
cv::Mat image = cv::imread(imageName);
if (!image.data)
{
cout << "Could not load image file..." << endl;
return -1;
}
writer << image;
}
cout << "*********************生成视频成功!*********************" << endl;
system("pause");
return 0;
}
MATLAB
视频转图片
%%将视频转换成帧图片
clc;
clear;
%% 读取视频
video_path='video_test.avi';
video_obj=VideoReader(video_path);
frame_number=video_obj.NumberOfFrames;
%% 存储每一帧图片到文件夹image
if ~exist('image','dir')
mkdir('image');
disp('successfully create directory image!');
end
for i=1:frame_number
image_name=strcat('./image/im_',num2str(i),'.jpg');
frame=read(video_obj,i);
imwrite(frame,image_name,'jpg');
end
disp('all images are written into directory image')
图片转视频 (完美,不卡)
framesPath = 'C:\Users\jingling\Desktop\TCP图像传输_C++\client\clent\';%图像序列所在路径,同时要保证图像大小相同
videoName = 'C:\Users\jingling\Desktop\TCP图像传输_C++\client\clent\Bolt.avi';%表示将要创建的视频文件的名字
fps = 25; %帧率
startFrame = 0; %从哪一帧开始
endFrame = 507; %哪一帧结束
if(exist('videoName','file'))
delete videoName.avi
end
%生成视频的参数设定
aviobj=VideoWriter(videoName); %创建一个avi视频文件对象,开始时其为空
aviobj.FrameRate=fps;
open(aviobj);%Open file for writing video data
%读入图片
for i=startFrame:endFrame
fileName=sprintf('image%d',i); %根据文件名而定 我这里文件名是image0.jpg image1.jpg .... image507
frames=imread([framesPath,fileName,'.jpg']);
writeVideo(aviobj,frames);
end
close(aviobj);% 关闭创建视频
结果: