1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件

本文介绍了一个使用OpenCV库创建视频文件的示例代码。通过随机生成几何图形并将其写入视频,演示了如何利用C++进行视频帧的生成与合成。该教程覆盖了从窗口创建到图像操作及视频写入的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码地址:http://download.youkuaiyun.com/detail/nuptboyzhb/3961674

写视频文件


Ø 新建菜单项,Learning OpenCV——> OpenCVr入门——>写视频文件

Ø 菜单项设置如下


Ø 建立类向导

Ø 编辑代码

voidCCVMFCView::OnMyWriteVedio()

{

// TODO: Add your command handler codehere

CStringcsAVI="AVI Files(*.avi)|*.avi|";

CStringcsFilter=csAVI;

CStringname[]={"","avi",""};

CStringstrFileName;

CStringstrExtension;

CFileDialogFileDlg(false,NULL,NULL,OFN_HIDEREADONLY,csFilter);

// 文件存盘对话框

if(FileDlg.DoModal()==IDOK ) {// 选择了文件名

strFileName= FileDlg.m_ofn.lpstrFile;

if(FileDlg.m_ofn.nFileExtension == 0) {// 无文件后缀

strExtension= name[FileDlg.m_ofn.nFilterIndex];

strFileName= strFileName + '.' + strExtension;

// 加文件后缀

}

int width = 1000, height = 700;

//-----------------------------------------------------

CvVideoWriter *vw;

vw= cvCreateVideoWriter (strFileName,-1,25, cvSize(width,height),1); //-1可以

//-----------------------------------------------------

int line_type = CV_AA; // changeit to 8 to see non-antialiased graphics

int i;

CvPoint pt1,pt2,pt_zhb;

double angle;

CvSize sz;

CvPoint ptt[6];

CvPoint* pt[2];

int arr[2];

CvFont font;

CvRNG rng;

int width3 = width*3, height3 =height*3;

CvSize text_size;

int ymin = 0;

// Load the source image

IplImage* image = cvCreateImage(cvSize(width,height), 8, 3 );

IplImage* image2;

// Create a window

cvNamedWindow(wndnamed, 1 );

cvZero( image );

cvShowImage(wndnamed,image);

cvWriteFrame(vw,image);

rng = cvRNG((unsigned)-1);

pt[0] = &(ptt[0]);

pt[1] = &(ptt[3]);

arr[0] = 3;

arr[1] = 3;

m_ImageType=-3;

for (i = 0; i< NUMBER; i++)

{

pt1.x=cvRandInt(&rng) %width3 - width;

pt1.y=cvRandInt(&rng) %height3 - height;

pt2.x=cvRandInt(&rng) %width3 - width;

pt2.y=cvRandInt(&rng) %height3 - height;

cvLine( image, pt1, pt2,random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );

cvShowImage(wndnamed,image);

cvWriteFrame (vw,image);

cvWaitKey(DELAY);

}

for (i = 0; i< NUMBER; i++)

{

pt1.x=cvRandInt(&rng) %width3 - width;

pt1.y=cvRandInt(&rng) %height3 - height;

pt2.x=cvRandInt(&rng) %width3 - width;

pt2.y=cvRandInt(&rng) %height3 - height;

cvRectangle( image,pt1,pt2, random_color(&rng), cvRandInt(&rng)%10-1, line_type, 0 );

cvShowImage(wndnamed,image);

cvWriteFrame (vw,image);

cvWaitKey(DELAY);

}

for (i = 0; i< NUMBER; i++)

{

pt1.x=cvRandInt(&rng) %width3 - width;

pt1.y=cvRandInt(&rng) %height3 - height;

sz.width=cvRandInt(&rng)%200;

sz.height=cvRandInt(&rng)%200;

angle =(cvRandInt(&rng)%1000)*0.180;

cvEllipse( image, pt1, sz,angle, angle - 100, angle + 200,

random_color(&rng),cvRandInt(&rng)%10-1, line_type, 0 );

cvShowImage(wndnamed,image);

cvWriteFrame (vw,image);

cvWaitKey(DELAY);

}

for (i = 0; i< NUMBER; i++)

{

pt[0][0].x=cvRandInt(&rng)% width3 - width;

pt[0][0].y=cvRandInt(&rng)% height3 - height;

pt[0][1].x=cvRandInt(&rng)% width3 - width;

pt[0][1].y=cvRandInt(&rng)% height3 - height;

pt[0][2].x=cvRandInt(&rng)% width3 - width;

pt[0][2].y=cvRandInt(&rng)% height3 - height;

pt[1][0].x=cvRandInt(&rng)% width3 - width;

pt[1][0].y=cvRandInt(&rng)% height3 - height;

pt[1][1].x=cvRandInt(&rng)% width3 - width;

pt[1][1].y=cvRandInt(&rng)% height3 - height;

pt[1][2].x=cvRandInt(&rng)% width3 - width;

pt[1][2].y=cvRandInt(&rng)% height3 - height;

cvPolyLine( image, pt, arr,2, 1, random_color(&rng), cvRandInt(&rng)%10, line_type, 0 );

cvShowImage(wndnamed,image);

cvWriteFrame (vw,image);

cvWaitKey(DELAY);

}

for (i = 0; i< NUMBER; i++)

{

pt[0][0].x=cvRandInt(&rng)% width3 - width;

pt[0][0].y=cvRandInt(&rng)% height3 - height;

pt[0][1].x=cvRandInt(&rng)% width3 - width;

pt[0][1].y=cvRandInt(&rng)% height3 - height;

pt[0][2].x=cvRandInt(&rng)% width3 - width;

pt[0][2].y=cvRandInt(&rng)% height3 - height;

pt[1][0].x=cvRandInt(&rng)% width3 - width;

pt[1][0].y=cvRandInt(&rng)% height3 - height;

pt[1][1].x=cvRandInt(&rng)% width3 - width;

pt[1][1].y=cvRandInt(&rng)% height3 - height;

pt[1][2].x=cvRandInt(&rng)% width3 - width;

pt[1][2].y=cvRandInt(&rng)% height3 - height;

cvFillPoly( image, pt, arr,2, random_color(&rng), line_type, 0 );

cvShowImage(wndnamed,image);

cvWriteFrame (vw,image);

cvWaitKey(DELAY);

}

for (i = 0; i< NUMBER; i++)

{

pt1.x=cvRandInt(&rng) %width3 - width;

pt1.y=cvRandInt(&rng) %height3 - height;

cvCircle( image, pt1,cvRandInt(&rng)%300, random_color(&rng),

cvRandInt(&rng)%10-1,line_type, 0 );

cvShowImage(wndnamed,image);

cvWriteFrame (vw,image);

cvWaitKey(DELAY);

}

for (i = 1; i< NUMBER; i++)

{

pt1.x=cvRandInt(&rng) %width3 - width;

pt1.y=cvRandInt(&rng) %height3 - height;

cvInitFont( &font,cvRandInt(&rng) % 8,

(cvRandInt(&rng)%100)*0.05+0.1,(cvRandInt(&rng)%100)*0.05+0.1,

(cvRandInt(&rng)%5)*0.1,cvRound(cvRandInt(&rng)%10), line_type );

cvPutText( image, "Ilove zjq!", pt1, &font, random_color(&rng));

cvShowImage(wndnamed,image);

cvWriteFrame(vw,image);

cvWaitKey(DELAY);

}

cvInitFont( &font, CV_FONT_HERSHEY_COMPLEX,3, 3, 0.0, 5, line_type );

cvGetTextSize( "OpenCVforever!", &font, &text_size, &ymin );

pt1.x = (width -text_size.width)/2-80;

pt1.y = (height +text_size.height)/2-100;

image2 = cvCloneImage(image);

pt_zhb.x=pt1.x;

pt_zhb.y=pt1.y+300;

for( i = 0; i < 255; i++ )

{

cvSubS( image2,cvScalarAll(i), image, 0 );

cvPutText( image,"OpenCV forever!", pt1, &font, CV_RGB(255,i,i));

cvPutText( image,"Made By ZhengHB!", pt_zhb, &font, CV_RGB(255,i,i));

cvShowImage(wndnamed,image);

cvWriteFrame(vw,image);

cvWaitKey(DELAY);

}

// Wait for a key stroke; the samefunction arranges events processing

cvReleaseVideoWriter (&vw);

cvWaitKey(0);

cvReleaseImage(&image);

cvReleaseImage(&image2);

cvDestroyWindow(wndnamed);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值