图像处理中的视频转图像&图像转视频

在图像处理的研究中,对每个人来说所需处理的数据不同,图像转视频和视频转图像是非常常用的操作,在此与大家分享这两个代码,都是用C++和opencv实现的,自己写的,绝对能用。

图像转视频:

#include <cv.h>
#include <iostream>
#include <highgui.h>

using namespace cv;
using namespace std;

#define NUM_FRAME 24560 //最大图像个数,根据自己情况修改

int main()
{
        int i = 0;
		Mat img;
        char image_name[100];
        printf("-------- image to video --------\n");
	
        VideoWriter writer;
        int isColor = 1;
        int fps    = 25;
        int frameW = 640; 
        int frameH = 480; 
		
        //创建视频写入器
        writer=VideoWriter("out.avi",CV_FOURCC('P','I','M','1'),fps,cvSize(frameW,frameH),isColor);
        printf("video height : %d\nvideo width : %d\nfps : %d\n", frameH, frameW, fps);
        
        //创建视频播放窗口
        while(i<NUM_FRAME)
        {
                sprintf(image_name, "E:\\soucedata\\BMC-Dataset\\Evaluation_Rotary_1\\122_png\\input\\%d.png", ++i);
                img = imread(image_name);
                if(!img.data)  //图片不存在则跳过继续处理下一帧
                {
                        continue;
                }
                imshow("mainWin", img);
                char key = waitKey(20);
                writer.write(img);
                img.release(); 
        }
        cout << "--------image to video over---------" << endl; 
        writer.release();
        destroyWindow("mainWin");
        return 0;
}
视频转图像:

#include <iostream>
#include <string>
#include <vector>
#include <cv.h>
#include <highgui.h>

using namespace std;
using namespace cv;

int main()
{
	string videopath = "E:\\Project\\vs2012\\Video2Img\\Video2Img\\out.avi";
	VideoCapture capture(videopath);
	Mat frame;
    //获取整个视频帧数
	long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);
	cout << "此个视频共" << totalFrameNumber << "帧" << "\n"<<endl;
	while(1)
	{
		if(!capture.read(frame))
		{
			cout << "读取视频失败" << endl;
			return -1;
		}
		//imshow("img",frame);
		int fs1 = capture.get(CV_CAP_PROP_POS_FRAMES)-1;
		ostringstream outbuff;
		outbuff << "E:\\Project\\vs2012\\Video2Img\\Video2Img\\img\\" << fs1 << ".jpg";

		vector<int> compression_params;
		compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
		compression_params.push_back(9);
		imwrite(outbuff.str(), frame, compression_params);
	}
	capture.release();
	return 0;
}

其实matlab处理这两个问题也许更简单,但是我这个大水货一直掌握不了matlab内存操作的精髓,每次都是“OUT OF MEMORY”,最终投奔C++&opencv,效果还不错,有空了借助QT将其封装一下,就好用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值