《学习opencv》123章部分习题参考程序.docx

上传人:b****5 文档编号:12369146 上传时间:2023-04-18 格式:DOCX 页数:15 大小:957.62KB
下载 相关 举报
《学习opencv》123章部分习题参考程序.docx_第1页
第1页 / 共15页
《学习opencv》123章部分习题参考程序.docx_第2页
第2页 / 共15页
《学习opencv》123章部分习题参考程序.docx_第3页
第3页 / 共15页
《学习opencv》123章部分习题参考程序.docx_第4页
第4页 / 共15页
《学习opencv》123章部分习题参考程序.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

《学习opencv》123章部分习题参考程序.docx

《《学习opencv》123章部分习题参考程序.docx》由会员分享,可在线阅读,更多相关《《学习opencv》123章部分习题参考程序.docx(15页珍藏版)》请在冰豆网上搜索。

《学习opencv》123章部分习题参考程序.docx

《学习opencv》123章部分习题参考程序

习题解答

2.1利用MicrosoftVisualStudio2010打开D:

\OpenCV2.1\VS2010\OpenCV.sln文件,如图1示。

在“SolutionConfiguration”下选择“Debug”模式,右击解决方案,选择“BuildSolution”进行编译,编译结束后结果显示如图2示。

再次右击文件“INSTALL”,选择“RebuildSolution”进行再编译,编译后结果显示如图3示。

同理,“Release”模式和“Debug”模式操作相同(示图略)。

这样就产生了“Debug”和“Release”两个版本的库文件。

图1载入解决方案OpenCV.sln

图2编译解决方案

图3再编译INSTALL

2.2创建工程:

Move实验,导入文件lkdemo.c,如图4示。

在PC机上安装摄像头,编译

工程,运行程序如图5示。

键入“r”后显示图像如图6示;键入“n”后显示图像如图7示。

图4创建工程

图5运行程序结果显示

图6跟踪初始化显示

图7夜间模式跟踪

2.3

#include"cv.h"

#include"highgui.h"

IplImage*DoPyDown(IplImage*in,intfliter=IPL_GAUSSIAN_5x5);

main(intargc,char**argv)

{

CvCapture*capture=0;

//创建窗口,显示缩放前的文件

cvNamedWindow("AVI_Example",1);

//创建窗口,显示缩放后的文件

cvNamedWindow("AVI_After");

//选择是从摄像头中读取还是从文件中读取

if(argc==1)

{

capture=cvCreateCameraCapture(0);

}

else

{

capture=cvCreateFileCapture("m.avi");

}

assert(capture!

=NULL);//和下一句if作用相同

if(!

capture)

{

return-1;

}

IplImage*bgr_frame=cvQueryFrame(capture);

doublefps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);

//得到要写入视频的宽高数据

CvSizesize=cvSize(((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH))/2,

((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT))/2

);

//下一句创建一个写入设备以便将视频流写入视频文件

CvVideoWriter*writer=cvCreateVideoWriter("lgc.avi",-1,fps,size);

IplImage*OutImage;

IplImage*logpolar_frame=cvCreateImage(size,IPL_DEPTH_8U,3);

//判断逐帧读取是否为空(是否读完)

while((bgr_frame=cvQueryFrame(capture))!

=NULL)

{

//对视频进行转换,用此函数后录制的文件变形

cvLogPolar(bgr_frame,logpolar_frame,

cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),

40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS

);

OutImage=DoPyDown(bgr_frame);

//对图像进行翻转

cvConvertImage(OutImage,OutImage,CV_CVTIMG_FLIP);

//将处理后的视频写入文件

cvWriteFrame(writer,OutImage);

//显示视频

cvShowImage("AVI_Example",bgr_frame);

//显示缩放后的视频

cvShowImage("AVI_After",OutImage/*logpolar_frame*/);

//等待键盘事件

charc=cvWaitKey

(1);

if(27==c)

{

break;

}

}

//释放资源

cvReleaseVideoWriter(&writer);

cvReleaseImage(&bgr_frame);

cvReleaseImage(&OutImage);

cvReleaseCapture(&capture);

//销毁窗口

cvDestroyWindow("AVI_Example");

return(0);

}

//自定义函数的实现

IplImage*DoPyDown(IplImage*in,intfliter/*=IPL_GAUSSIAN_5x5*/)

{

IplImage*out=cvCreateImage(

cvSize(in->width/2,in->height/2),

in->depth,

in->nChannels);

cvPyrDown(in,out,IPL_GAUSSIAN_5x5);

return(out);

}

3.1

#include"stdio.h"

#include"cxcore.h"

#include"cv.h"

#include"cxtypes.h"

//连接lib文件

#pragmacomment(lib,"cv.lib")

#pragmacomment(lib,"cvcam.lib")

#pragmacomment(lib,"cxcore.lib")

#pragmacomment(lib,"highgui.lib")

intmain(intargc,char**argv)

{

printf("***a:

给定一个负数,求其绝对值,四舍五入之后,求其极值\n");

doublefushu=-12.6345;

printf("给定的数:

%f\n",fushu);

doublef=fabs(fushu);

printf("其绝对值:

%f\n",f);

//四舍五入之后:

cvRound()函数,

intm=cvRound(f);

printf("四舍五入之后:

%d\n",m);

printf("\n***b:

产生一些随机数:

\n");

intrng;

CvRNGrng=cvRNG();

for(inti=0;i<50;i++)

{

//调用cvRandInt()函数,产生随机数

printf("%d",(uchar)cvRandInt(&rng));

}

printf("\n");

//***cCvpoint2D32f类型到CvPoint类型的转换

printf("\n***c:

Cvpoint2D32f类型到CvPoint类型的转换:

\n");

CvPoint2D32fcpf;

cpf=cvPoint2D32f(34.23564423,64.2545656);

printf("%f,%f\n",cpf.x,cpf.y);

CvPointcp=cvPointFrom32f(cpf);

printf("%d,%d\n",cp.x,cp.y);

//***dCvPoint类型到CvPoint2D32f类型的转换

printf("\n***d:

CvPoint类型到CvPoint2D32f类型的转换:

\n");

//定义CvPoint类型变量并调用构造函数初始化

CvPointpoint=cvPoint(234,53);

printf("转换前的数据:

%d,%d\n",point.x,point.y);

//把CvPoint类型转换为CvPoint2D32f类型:

cvPointTo2D32f函数

CvPoint2D32fcpoint=cvPointTo32f(point);

printf("转换后的数据:

%f,%f\n\n",cpoint.x,cpoint.y);

return0;

}

3.2源代码如下:

#include

#include

intmain()

{

//IplImage*srcImg=NULL;

CvMat*srcMat=cvCreateMat(100,100,CV_8UC3);//100*1003通道字节型

cvSetZero(srcMat);//清零

CvPointcirPoint=cvPoint(50,50);//圆心

intradius=40;//半径

CvScalarcirColor=cvScalar(255,0,0);//蓝色

cvCircle(srcMat,cirPoint,radius,cirColor);//画圆

cvNamedWindow("Exam302");

cvShowImage("Exam302",(IplImage*)srcMat);

cvWaitKey(0);

cvReleaseMat(&srcMat);

cvDestroyWindow("Exam302");

return0;

}

编译运行结果如图8示。

图8绘制图形

3.3

源代码如下:

#include

#include

intmain()

{

CvMat*srcMat=cvCreateMat(100,100,CV_8UC3);//100*100

cvZero(srcMat);

cvRectangle((IplImage*)srcMat,cvPoint(20,5),cvPoint(40,20),cvScalar(0,255,0));

cvNamedWindow("Rectangle");

cvShowImage("Rectangle",srcMat);

cvWaitKey(0);

cvReleaseMat(&srcMat);

cvDestroyWindow("Rectangle");

return0;

}

编译运行结果如图9示。

图9绘制矩形

3.5

源代码如下:

#include"cv.h"

#include"highgui.h"

intmain()

{

IplImage*single_img=cvCreateImage(cvSize(210,210),8,1);//210*210单通道

cvZero(single_img);

intWidth=210,Height=210;

intmaxPixel=200;

intvalue=0;

inti,j;

for(i=0,j=0;i<=Width,j<=Height;)

{

//for(i=0;i<=Width;)

//{

cvSetImageROI(single_img,cvRect(i,j,Width-i,Height-j));//settheROIofthesingle_img

//cvSetImageROI(single_img,cvRect(0,0,Width,Height));

cvSet(single_img,cvScalar(value,0,0));

value+=20;

cvResetImageROI(single_img);

//}

i+=10;//边界都为10个像素宽度

j+=10;

if(value==maxPixel)//超过最大像素值200时,退出

{

break;

}

}

cvNamedWindow("ROI",0);

cvShowImage("ROI",single_img);

cvWaitKey(0);

cvDestroyWindow("ROI");

cvReleaseImage(&single_img);

return0;

}

编译运行结果如图10示。

图10ROI

3.7

源代码如下:

#include

#include

intmain()

{

char*filePath="D:

/图片库/Baboon.jpg";

IplImage*srcImg=cvLoadImage(filePath);//loadtheimage

if(!

srcImg)

{

printf("cannotopenthefile...\n");

return-1;

}

IplImage*rImg=cvCreateImage(cvGetSize(srcImg),srcImg->depth,1);

IplImage*gImg=cvCreateImage(cvGetSize(srcImg),srcImg->depth,1);

IplImage*bImg=cvCreateImage(cvGetSize(srcImg),srcImg->depth,1);//创建单通道r,g,b图像

IplImage*clone1=cvCreateImage(cvGetSize(srcImg),srcImg->depth,1);

IplImage*clone2=cvCreateImage(cvGetSize(srcImg),srcImg->depth,1);

doublegreen_maxPixel=0;

doublegreen_minPixel=0;//绿色平面最大最小值

doublethresh;//阈值thresh

cvSplit(srcImg,rImg,gImg,bImg,0);//拆分3通道

//-------------------a小题------------------

cvNamedWindow("GreenImage0");

cvShowImage("GreenImage0",gImg);

//-------------------b小题---------------------

cvCopy(gImg,clone1);

cvCopy(gImg,clone2);//copythegImgtoclone1andclone2

//-----------------c小题求绿色平面最大最小值-----------------

cvMinMaxLoc(gImg,&green_maxPixel,&green_minPixel);

//-------------------d小题-------------------------------

thresh=(unsignedchar)(green_maxPixel-green_minPixel)/2.0;

cvSet(clone1,cvScalar(thresh));

//----------------------e小题-----------------------

cvZero(clone2);

cvCmp(gImg,clone1,clone2,CV_CMP_GE);//---------------------------f小题-------------------

cvSubS(gImg,cvScalar(thresh/2),gImg,clone2);

cvNamedWindow("GreenImage1");

cvShowImage("GreenImage1",gImg);

cvWaitKey(0);

cvReleaseImage(&srcImg);

cvReleaseImage(&rImg);

cvReleaseImage(&gImg);

cvReleaseImage(&bImg);

cvDestroyWindow("GreenImage0");

cvDestroyWindow("GreenImage1");

return0;

}

编译运行结果如图11示。

图11

 

注:

本实验环境在MicrosoftVisualC++2010,Opencv2.2下完成

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1