已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习Opencv课后习题答案2.1 利用Microsoft Visual Studio 2010打开D:OpenCV2.1VS2010 OpenCV.sln文件,如图1示。在“Solution Configuration”下选择“Debug”模式,右击解决方案,选择“Build Solution”进行编译,编译结束后结果显示如图2示。再次右击文件“INSTALL”,选择“Rebuild Solution”进行再编译,编译后结果显示如图3示。同理,“Release”模式和“Debug”模式操作相同(示图略)。这样就产生了“Debug”和“Release”两个版本的库文件。图1 载入解决方案OpenCV.sln图2 编译解决方案图3 再编译INSTALL2.2创建工程:Move实验,导入文件lkdemo.c,如图4示。在PC机上安装摄像头,编译工程,运行程序如图5示。键入“r”后显示图像如图6示;键入“n”后显示图像如图7示。图4 创建工程图5 运行程序结果显示图6 跟踪初始化显示图7 夜间模式跟踪2.3 #include cv.h#include highgui.hIplImage *DoPyDown(IplImage *in,int fliter = IPL_GAUSSIAN_5x5);main(int argc, 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); double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); /得到要写入视频的宽高数据CvSize size = 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*/);/等待键盘事件char c=cvWaitKey(1);if (27=c)break;/释放资源cvReleaseVideoWriter(&writer); cvReleaseImage(&bgr_frame);cvReleaseImage(&OutImage);cvReleaseCapture(&capture); /销毁窗口cvDestroyWindow(AVI_Example);return(0);/自定义函数的实现IplImage *DoPyDown(IplImage *in,int fliter/* = 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文件#pragma comment(lib,cv.lib)#pragma comment(lib,cvcam.lib)#pragma comment(lib,cxcore.lib)#pragma comment(lib,highgui.lib)int main(int argc,char*argv)printf(* a:给定一个负数,求其绝对值,四舍五入之后,求其极值n); double fushu = -12.6345;printf(给定的数:%fn,fushu); double f=fabs(fushu);printf(其绝对值:%fn,f); /四舍五入之后:cvRound()函数, int m = cvRound(f);printf(四舍五入之后:%dn,m); printf(n* b:产生一些随机数:n);int rng; CvRNG rng = cvRNG();for (int i=0;i50;i+)/调用cvRandInt()函数,产生随机数printf(%d ,(uchar)cvRandInt(&rng);printf(n);/* c Cvpoint2D32f类型到 CvPoint 类型的转换printf(n* c: Cvpoint2D32f 类型到 CvPoint 类型的转换:n); CvPoint2D32f cpf;cpf=cvPoint2D32f(34.23564423,64.2545656);printf(%f,%fn,cpf.x,cpf.y); CvPoint cp=cvPointFrom32f(cpf);printf(%d,%dn,cp.x,cp.y);/* d CvPoint 类型到 CvPoint2D32f类型的转换printf(n* d:CvPoint类型到 CvPoint2D32f类型的转换:n);/定义CvPoint类型变量并调用构造函数初始化CvPoint point=cvPoint(234,53);printf(转换前的数据:%d,%dn,point.x,point.y); /把CvPoint类型转换为CvPoint2D32f类型:cvPointTo2D32f函数CvPoint2D32f cpoint=cvPointTo32f(point);printf(转换后的数据:%f,%fnn,cpoint.x,cpoint.y);return 0;3.2 源代码如下:#include #include int main()/IplImage* srcImg = NULL;CvMat* srcMat = cvCreateMat(100, 100, CV_8UC3);/100*100 3通道字节型cvSetZero(srcMat);/清零 CvPoint cirPoint = cvPoint(50, 50);/圆心int radius = 40;/半径CvScalar cirColor = cvScalar(255, 0,0 );/蓝色cvCircle(srcMat, cirPoint, radius, cirColor);/画圆cvNamedWindow(Exam302);cvShowImage(Exam302, (IplImage*)srcMat);cvWaitKey(0);cvReleaseMat(&srcMat);cvDestroyWindow(Exam302); return 0;编译运行结果如图8示。图8 绘制图形3.3源代码如下:#include #include int main()CvMat* srcMat = cvCreateMat(100, 100, CV_8UC3);/100*100cvZero(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);return 0;编译运行结果如图9示。图9 绘制矩形3.5源代码如下:#include cv.h#include highgui.hint main()IplImage* single_img = cvCreateImage(cvSize(210, 210), 8, 1);/210*210 单通道cvZero(single_img);int Width = 210, Height = 210;int maxPixel =200;int value = 0;int i, 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);/set the ROI of the single_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);return 0;编译运行结果如图10示。图10 ROI3.7 源代码如下:#include #include int main()char* filePath = D:/图片库/Baboon.jpg;IplImage* srcImg = cvLoadImage(filePath);/load the imageif(!srcImg)printf(cannot open the file.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); double green_maxPixel = 0;double green_minPixel = 0;/绿色平面最大最小值double thresh;/阈值thresh cvSplit(srcImg, rImg, gImg, bImg, 0);/拆分3通道 /-a小题 -cvNamedWindow(GreenImage0);cvShowImage(GreenImage0, gImg); /-b小题-cvCopy(gImg, clone1);cvCopy(gImg, clone2);/copy the gImg to clone1 and clone2 /-c小题求绿色平面最大最小值-cvMinMaxLoc(gImg, &green_maxPixel, &green_minPixel);/-d小题- thresh = (unsigned char)(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); return 0;编译运行结果如图11示。图11注:本实验环境在Microsoft Visual C+2010,Opencv2.2下完成第三章1.a.abs() cvRound() cvFloor() cvCeil()b.cvRNG() cvRandInt() cvRandReal()c.cvPointFrom32f()d.cvPointTo32f()2.#include #include #include int main(int argc, char* argv)IplImage *img; img = cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);cvZero(img);cvCircle(img,cvPoint(50,50),50,cvScalar(255,0,0),1);cvNamedWindow( Source, CV_WINDOW_AUTOSIZE );cvShowImage( Source, img );cvWaitKey();return 0;3.#include #include #include int main(int argc, char* argv)IplImage *img; img = cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);cvZero(img);uchar* pData = cvPtr2D(img,1,0,NULL);cvRectangle(img,cvPoint(20,5),cvPoint(40,20),CV_RGB(0,255,0),1);cvNamedWindow( Source, CV_WINDOW_AUTOSIZE );cvShowImage( Source, img );cvWaitKey();return 0;4.#include #include #include int main(int argc, char* argv)IplImage *img; img = cvCreateImage(cvSize(200,200),IPL_DEPTH_8U,3);cvZero(img);for (int y=5;yimageData + y*img-widthStep); for (int x=20;x40;x+) ptr3*x = 255; ptr3*x + 1 = 0; ptr3*x + 2 = 0; cvNamedWindow( Source, CV_WINDOW_AUTOSIZE );cvShowImage( Source, img );cvWaitKey();return 0;5.#include #include #include int main(int argc, char* argv)IplImage *img; img = cvCreateImage(cvSize(210,210),IPL_DEPTH_8U,1);cvZero(img);int interset_x = 0;int interset_y = 0;int offset_x = img-width;int offset_y = img-height;int add = 0;int res =0;BOOL condition = TRUE;while(add200) cvSetImageROI(img,cvRect(interset_x,interset_y,offset_x,offset_y); if (condition) cvSet(img,cvScalar(0); condition = FALSE; else cvSet(img,cvScalar(add); condition = TRUE; cvResetImageROI(img); add = add+20; interset_x = interset_x +10; interset_y = interset_y +10; offset_x = offset_x -20; offset_y = offset_y -20;cvNamedWindow( Source, CV_WINDOW_AUTOSIZE );cvShowImage( Source, img );cvWaitKey();return 0;6.#include #include #include int main(int argc, char* argv)IplImage *img; img = cvLoadImage(lena.bmp,1);IplImage* dst1 = cvCreateImageHeader(cvSize(20,30),img-depth,img-nChannels);IplImage* dst2 = cvCreateImageHeader(cvSize(20,30),img-depth,img-nChannels);dst1-origin = img-origin;dst2-origin = img-origin;dst1-widthStep = img-widthStep;dst2-widthStep = img-widthStep;dst1-imageData = img-imageData+10*img-widthStep+5*img-nChannels;dst2-imageData = img-imageData+60*img-widthStep+50*img-nChannels;cvNot(dst1,dst1);cvNot(dst2,dst2);cvNamedWindow( Source, CV_WINDOW_AUTOSIZE );cvShowImage( Source, img );cvWaitKey();cvReleaseImageHeader(&dst1);cvReleaseImageHeader(&dst2);return 0;7.#include #include #include int main(int argc, char* argv)IplImage *img;IplImage *clone1,*clone2;img = cvLoadImage(lena.bmp,1);IplImage* dst = cvCreateImage(cvGetSize(img),img-depth,1);cvSplit( img, dst, 0, 0, 0 ); clone1 = cvCloneImage(dst);clone2 = cvCloneImage(dst);double max,min;cvMinMaxLoc(dst,&min,&max);double thresh = (max-min)/2;cvSet(clone1,cvScalar(thresh);cvZero(clone2);cvCmp(dst,clone1,clone2,CV_CMP_GE);cvSubS(dst,cvScalar(thresh/2),dst,clone2);cvNamedWindow( Source, CV_WINDOW_AUTOSIZE );cvShowImage( Source, dst );cvWaitKey();cvReleaseImage(&dst);return 0;8.#include #include #include struct my_structint Value;CvPoint point;CvRect rect;void write_my_struct(CvFileStorage* fs,const char* name,my_struct* ms)cvWriteInt(fs,name,ms-Value);cvStartWriteStruct(fs,name,CV_NODE_SEQ);cvWriteInt(fs,0,ms-point.x);cvWriteInt(fs,0,ms-point.y);cvEndWriteStruct(fs);cvStartWriteStruct(fs,name,CV_NODE_SEQ);cvWriteInt(fs,0,ms-rect.x);cvWriteInt(fs,0,ms-rect.y);cvWriteInt(fs,0,ms-rect.width);cvWriteInt(fs,0,ms-rect.height);cvEndWriteStruct(fs);void read_my_struct(CvFileStorage* fs,CvFileNode* ms_node,my_struct* ms)int value = cvReadIntByName(fs,0,Value,5);CvSeq* s = cvGetFileNodeByName(fs,0,point)-data.seq;int point_x = cvReadInt(CvFileNode*)cvGetSeqElem(s,0);int point_y = cvReadInt(CvFileNode*)cvGetSeqElem(s,1);int main(int argc, char* argv)CvFileStorage* fs = cvOpenFileStorage( cfg.xml, 0, CV_STORAGE_WRITE );my_struct ms = 10,cvPoint(10,20),cvRect(0,0,20,50); write_my_struct(fs,struct,&ms);cvReleaseFileStorage(&fs);return 0;生成的cfg.xml文件 - 10 10 20 0 0 20 50 4.3 #include #include #include CvRect g_rect;bool g_isdown;void my_callback(int event, int x, int y, int flags, void* param);/将image图像的rect区域部分做加亮处理void high_light(IplImage *image,CvRect rect);/对选中的部分绘制直方图void Draw_hist(IplImage* img,CvRect Rect);int main()IplImage *orginal_image=cvLoadImage(fruits.jpg);assert(orginal_image!=NULL);IplImage *temp_image=cvCreateImage(cvGetSize(orginal_image),orginal_image-depth, orginal_image-nChannels);assert(temp_image!=NULL);cvNamedWindow(Show);cvSetMouseCallback(Show,my_callback,(void*)temp_image);while (1)IplImage *temp_image= cvCloneImage(orginal_image);if (true=g_isdown)high_light(temp_image,g_rect);Draw_hist(temp_image,g_rect);elsehigh_light(temp_image,g_rect);Draw_hist(temp_image,g_rect);cvShowImage(Show,temp_image);if (27=cvWaitKey(30)break;cvDestroyAllWindows();return 0;void my_callback(int event, int x, int y, int flags, void* param)IplImage *image=(IplImage*)(param);switch (event)case CV_EVENT_LBUTTONDOWN :g_isdown=true;g_rect=cvRect(x,y,0,0); break;case CV_EVENT_MOUSEMOVE:if (true=g_isdown)g_rect.width=x-g_rect.x;g_rect.height=y-g_rect.y;break;case CV_EVENT_LBUTTONUP :g_isdown=false;if (g_rect.width0)g_rect.x=g_rect.x+g_rect.width;g_rect.width*=-1;if (g_rect.height0)g_rect.y=g_rect.y+g_rect.height;g_rect.height*=-1;high_light(image,g_rect);Draw_hist(image,g_rect); break;/将图像进行加亮处理void high_light(IplImage *image,CvRect rect)assert(image!=NULL);int row,col;for (row=rect.y;rowimageData+row*image-widthStep);for (col=rect.x;col=image-height-1) row=image-height; /对选中的区域绘制直方图void Draw_hist(IplImage* img,CvRect Rect)if (Rect.x=0|Rect.y=0|Rect.width=0|Rect.height=0)return;cvSetImageROI(img,Rect);IplImage* hsv = cvCreateImage(/*cvSize(Rect.width ,Rect.height)*/cvGetSize(img), 8, 3 );IplImage* h_plane = cvCreateImage(/*cvSize(Rect.width ,Rect.height)*/cvGetSize(img), 8, 1 );IplImage* s_plane = cvCreateImage( cvSize(Rect.width ,Rect.height), 8, 1 );IplImage* v_plane = cvCreateImage( cvSize(Rect.width ,Rect.height), 8, 1 );IplImage* planes = h_plane, s_plane ;int h_bins = 16, s_bins = 8;int hist_size = h_bins, s_bins;float h_ranges = 0, 180 ; float s_ranges = 0, 255 ;float* ranges = h_ranges, s_ranges ;cvCvtColor( img, hsv, CV_BGR2HSV );cvResetImageROI(img);cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); CvHistogram * hist = cvCreateHist( 2, hist_size, CV_HIST_ARRAY, ranges, 1 );cvCalcHist( planes, hist, 0, 0 );float max_value;cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );int height = 480;int width = (h_bins*s_bins*6);IplImage* hist_img = cvCreateImage( cvSize(width,height), 8, 3 );cvZero( hist_img );IplImage * hsv_color = cvCreateImage(cvSize(1,1),8,3);IplImage * rgb_color = cvCreateImage(cvSize(1,1),8,3);int bin_w = width / (h_bins * s_bins);for(int h = 0; h h_bins; h+)for(int s = 0; s s_bins; s+)int i = h*s_bins + s;/* 获得直方图中的统计次数,计算显示在图像中的高度 */float bin_val = cvQueryHistValue_2D( hist, h, s );int intensity = cvRound(bin_val*height/max_value);/* 获得当前直方图代表的颜色,转换成RGB用于绘制 */cvSet2D(hsv_color,0,0,cvScalar(h*180.f / h_bins,s*255.f/s_bins,255,0);cvCvtColor(hsv_color,rgb_color,CV_HSV2BGR);CvScalar color = cvGet2D(rgb_color,0,0);cvRectangle( hist_img, cvPoint(i*bin_w,height),cvPoint(i+1)*bin_w,height - intensity),color, -1, 8, 0 );cvNamedWindow( H-S Histogram, 1 );cvShowImage( H-S Histogram, hist_img );4.4#include #include #includeint g_slider_position=0;CvCapture *g_capture=NULL;int i=0;int g_slider_position1=0;bool t=true;void onTrackbarSlide(int pos)cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos); i=pos;void switch_callback(int position)if(position = 0)t=true;elset=false;int main()cvNamedWindow(Video,CV_WINDOW_AUTOSIZE); g_capture=cvCaptureFromFile(D:/c6opencv/SDC14186.avi);int frames=(int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);if(frames!=0)cvCreateTrackbar(Position,Video,&g_slider_position,frames,onTrackbarSlide);cvCreateTrackbar(Position1,Video,&g_slider_position1,1,switch_callback);else printf(read video wrong);cvSetTrackbarPos(Position,Video,1);cvSetTrackbarPos(Position1,Video,0); IplImage *frame;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB/T 112-2026地震灾害预防专业标准体系表
- 外研版小学四年级英语下册课时2 Unit3 Everyone'sgottalent!教学设计
- 脐带绕颈分娩产妇的护理
- 精神障碍健康教育
- 2026下半年小学教师资格证考试综合素质高频考点模拟试卷及解析
- 青春期女孩儿护理方法
- 人工智能与数学的融合
- 插件安全操作规范讲解
- 普通患者健康须知
- 2026及未来5年中国塑料灯具配件数据监测研究报告
- 群体塔吊安全管理培训
- 2025届上海市金山区三下数学期末质量检测试题(含解析)
- 2026年人民法院聘用书记员考试重点试题及答案解析
- 2026海南省农业信贷担保有限责任公司招聘高层管理人员1人考试模拟试题及答案详解
- GB/T 47655-2026电力电子装备和系统的构网性能要求及试验方法
- -医疗器械gcp考试题库及答案解析
- 2026年新高考北京政治真题含答案
- 2026年博物馆社会教育活动策划方案
- 新版2026年高考政治(山东卷)真题详细解读及评析
- 【新教材】统编版(2024)一年级上册语文第二单元集体备课教案
- 绿城建筑工程工艺工法标准-机电安装篇
评论
0/150
提交评论