视频的每一帧转换成字符图
来源:互联网 发布:程序员都在这里接私活 编辑:程序博客网 时间:2024/05/02 01:00
// test3.cpp
//
// 该程序实现视频和图片的相互转换.
// Image_to_video()函数将一组图片合成AVI视频文件.
// Video_to_image()函数将AVI视频文件读入,将每一帧存储为jpg文件.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
#define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改
void Video_to_image(char* filename)
{
printf("------------- video to image ... ----------------n");
//初始化一个视频文件捕捉器
CvCapture* capture = cvCaptureFromAVI(filename);
//获取视频信息
cvQueryFrame(capture);
int frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
int frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
printf("tvideo height : %dntvideo width : %dntfps : %dntframe numbers : %dn", frameH, frameW, fps, numFrames);
//定义和初始化变量
int i = 0;
IplImage* img = 0;
char image_name[13],out_name[13];
cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );
//读取和显示
while(1)
{
img = cvQueryFrame(capture); //获取一帧图片
cvShowImage( "mainWin", img ); //将其显示
char key = cvWaitKey(20);
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");//保存的图片名
cvSaveImage( image_name, img); //保存一帧图片
if(i == NUM_FRAME) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("mainWin");
for(i=0;i<300;i++)
{
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
IplImage* src=cvLoadImage(image_name);
sprintf(out_name, "%d%s", i, ".txt");
ofstream fs(out_name);
cvNamedWindow("image",CV_WINDOW_AUTOSIZE);
CvScalar s;
for(int j=0;j<src->height;)
{
for(int k=0;k<src->width;)
{
s=cvGet2D(src,j,k);
int a=s.val[0];
if(a>128) fs<<" ";
else fs<<"@";
k+=2;
}
fs<<endl;
j+=4;
}
fs.close();
}
}
void Image_to_video()
{
int i = 0;
IplImage* img = 0;
char image_name[13];
printf("------------- image to video ... ----------------n");
//初始化视频编写器,参数根据实际视频文件修改
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 30; // or 25
int frameW = 400; // 744 for firewire cameras
int frameH = 240; // 480 for firewire cameras
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor);
printf("tvideo height : %dntvideo width : %dntfps : %dn", frameH, frameW, fps);
//创建窗口
cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );
while(i<NUM_FRAME)
{
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
img = cvLoadImage(image_name);
if(!img)
{
printf("Could not load image file...n");
exit(0);
}
cvShowImage("mainWin", img);
char key = cvWaitKey(20);
cvWriteFrame(writer, img);
}
cvReleaseVideoWriter(&writer);
cvDestroyWindow("mainWin");
}
int main(int argc, char *argv[])
{
char filename[13] = "1.flv";
Video_to_image(filename); //视频转图片
Image_to_video(); //图片转视频
return 0;
}
//
// 该程序实现视频和图片的相互转换.
// Image_to_video()函数将一组图片合成AVI视频文件.
// Video_to_image()函数将AVI视频文件读入,将每一帧存储为jpg文件.
//
////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
#define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改
void Video_to_image(char* filename)
{
printf("------------- video to image ... ----------------n");
//初始化一个视频文件捕捉器
CvCapture* capture = cvCaptureFromAVI(filename);
//获取视频信息
cvQueryFrame(capture);
int frameH = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
int frameW = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
printf("tvideo height : %dntvideo width : %dntfps : %dntframe numbers : %dn", frameH, frameW, fps, numFrames);
//定义和初始化变量
int i = 0;
IplImage* img = 0;
char image_name[13],out_name[13];
cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );
//读取和显示
while(1)
{
img = cvQueryFrame(capture); //获取一帧图片
cvShowImage( "mainWin", img ); //将其显示
char key = cvWaitKey(20);
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");//保存的图片名
cvSaveImage( image_name, img); //保存一帧图片
if(i == NUM_FRAME) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("mainWin");
for(i=0;i<300;i++)
{
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
IplImage* src=cvLoadImage(image_name);
sprintf(out_name, "%d%s", i, ".txt");
ofstream fs(out_name);
cvNamedWindow("image",CV_WINDOW_AUTOSIZE);
CvScalar s;
for(int j=0;j<src->height;)
{
for(int k=0;k<src->width;)
{
s=cvGet2D(src,j,k);
int a=s.val[0];
if(a>128) fs<<" ";
else fs<<"@";
k+=2;
}
fs<<endl;
j+=4;
}
fs.close();
}
}
void Image_to_video()
{
int i = 0;
IplImage* img = 0;
char image_name[13];
printf("------------- image to video ... ----------------n");
//初始化视频编写器,参数根据实际视频文件修改
CvVideoWriter *writer = 0;
int isColor = 1;
int fps = 30; // or 25
int frameW = 400; // 744 for firewire cameras
int frameH = 240; // 480 for firewire cameras
writer=cvCreateVideoWriter("out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor);
printf("tvideo height : %dntvideo width : %dntfps : %dn", frameH, frameW, fps);
//创建窗口
cvNamedWindow( "mainWin", CV_WINDOW_AUTOSIZE );
while(i<NUM_FRAME)
{
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
img = cvLoadImage(image_name);
if(!img)
{
printf("Could not load image file...n");
exit(0);
}
cvShowImage("mainWin", img);
char key = cvWaitKey(20);
cvWriteFrame(writer, img);
}
cvReleaseVideoWriter(&writer);
cvDestroyWindow("mainWin");
}
int main(int argc, char *argv[])
{
char filename[13] = "1.flv";
Video_to_image(filename); //视频转图片
Image_to_video(); //图片转视频
return 0;
}
0 0
- 视频的每一帧转换成字符图
- 提取视频每一帧
- opencv提取视频每一帧图片及图片转换为视频
- opencv提取视频每一帧
- iOS 视频的每一帧图片关键帧
- 使用MATLAB获取视频中每一帧的图像
- IOS获取视频每一帧的图片方法
- matlab将视频转成每一帧的方法
- 在网页上将视频的每一帧画到canvas上
- ffmpeg解析视频的每一帧(java )
- 获取视频的每一帧,并保存为.jpg图片
- opencv把视频的每一帧保存为图片
- Matlab把对应文件夹下的多个avi格式的视频转化成每一帧的图片
- ios 获取视频数据每一帧播放
- opencv 读取视频中的每一帧
- iphone ios取出视频的每一帧图片(关键帧,AVAssetImageGenerator)
- iphone ios取出视频的每一帧图片(关键帧,AVAssetImageGenerator)
- iphone ios取出视频的每一帧图片(关键帧,AVAssetImageGenerator)
- OC学习笔记之foundation
- 您计算机上的一个策略阻止您连接到该打印机列队。请与您的系统管理员联系
- centos7+mysql+svn(https方式访问)通过外网访问的配置
- WSUS环境下客户端常用命令
- GPU上和CPU上执行函数时间比较
- 视频的每一帧转换成字符图
- Windows风格的Loading动画Android实现(2)
- Android之——AIDL深入
- java之从1到n整数中1出现的次数
- PAT (Advanced Level) 1052. Linked List Sorting (25) 结构体排序
- 通过WSUS3.0 SP2为客户端部署IE8
- ACM常见高精度总结(java用法)
- 经典的SQL语句,适合新手练习使用(一)
- html5 列表居中