前言:
在做相关实验时,有时需要把视频的每一帧都保存下来并记录帧号,那么如何保存及记录的?在网上搜了下,比较普遍的程序是IplImage结构的:
一、IplImage结构
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>
#include <cv.h>
int main(int argc, char *argv[])
{
CvCapture* capture = cvCaptureFromAVI("D://vvoo1//me.avi");
int i = 0,j=0;
IplImage* img = 0;
char image_name[250];
CvFont font;
char showMsg[5];
cvNamedWindow("vivi");
//读取和显示
while (1)
{
img = cvQueryFrame(capture); //获取一帧图片
if (img == NULL)
break;
cvShowImage("vivi", img); //将其显示
char key = cvWaitKey(20);
cvInitFont(&font, CV_FONT_HERSHEY_SCRIPT_SIMPLEX, 1.0, 1.0, 0,2);//初始化字体,准备写到图片上的
// cvPoint 为起笔的x,y坐标
sprintf(showMsg, "%c%d", "#",j++);//保存的图片名
cvPutText(img, showMsg, cvPoint(20, 20), &font, CV_RGB(255, 0, 0));//在图片中输出字符
sprintf(image_name, "%s%d%s", "D:\\tutu\\img", i++, ".jpg");//保存的图片名
cvSaveImage(image_name, img); //保存一帧图片
}
cvReleaseCapture(&capture);
cvDestroyWindow("vivi");
return 0;
}
其中函数cvInitFont()和cvPutText()函数原型介绍如下:
void cvInitFont( CvFont* font, int font_face, double hscale,double vscale, double shear=0,int thickness=1, int line_type=8 );
font
被初始化的字体结构体。
font_face
字体名称标识符。只是Hershey 字体集( http://sources.isc.org/utils/misc/hershey-font.txt )的一个子集得到支持。
CV_FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。
CV_FONT_HERSHEY_PLAIN - 小号无衬线字体。
CV_FONT_HERSHEY_DUPLEX - 正常大小无衬线字体。( 比CV_FONT_HERSHEY_SIMPLEX更复杂)
CV_FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。