数字图像处理课程设计报告.docx
- 文档编号:23587912
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:23
- 大小:20.81KB
数字图像处理课程设计报告.docx
《数字图像处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
数字图像处理课程设计报告
《数字图像处理》课程设计
——多功能图像处理软件包
指导教师:
xxxxxxxxxx
班级:
xxxxxxxxxxxx
学号:
xxxxxxxxxxxxx
姓名:
xxxx
数字图像处理课程设计任务书
一、题目:
多功能图像处理软件包
二、目的:
1、提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。
2、熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。
三、要求
3.1总体要求
1、要充分认识课程设计对培养自己的重要性,认真做好设计前的各项准备工作。
尤其是对编程软件的使用有基本的认识。
2、既要虚心接受老师的指导,又要充分发挥主观能动性。
结合课题,独立思考,努力钻研,勤于实践,勇于创新。
3、独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。
4、在设计过程中,要严格要求自己,树立严肃、严密、严谨的科学态度,必须按时、按质、按量完成课程设计。
3.2实施要求
1、理解各种图像处理方法确切意义。
2、独立进行方案的制定,系统结构设计要合理。
3、在程序开发时,则必须清楚主要实现函数的目的和作用,需要在程序书写时说明做适当的注释。
使用VisualC++来进行开发,要理解每个函数的具体意义和适用范围,在写课设报告时,必须要将主要函数的功能和参数做详细的说明。
4、通过多幅不同形式的图像来检测该系统的稳定性和正确性。
3.3课程设计报告的内容及要求
在完成课题验收后,学生应在规定的时间内完成课程设计报告一份(不少于2000字)。
四、工作内容及工作计划:
(一周,分散进行)
序号
内容
所用时间
1
课题介绍、人员安排、熟悉编程环境
1天
2
分析题目,编写程序
3天
3
上机调试程序并写出设计报告
1天
合计
1周
五、成绩评定标准与考核:
本课程设计的评价由三部分组成,包括程序演示(50%),课程设计报告(30%),回答教师提问(20%)。
1、程序演示:
(1)优功能完善,全部测试正确,并且能够对局部进行完善
(2)良功能完善,但测试欠缺
(3)中功能基本完善,但程序尚有部分错误
(4)及格实现了主要功能基本完善,有部分功能尚未实现。
(5)不及格功能不完善,且程序错误较多,无法运行
2、课程设计报告:
(1)优包括设计内容,设计思想,已经完成的任务及达到的目标,
设计思路清晰、书写条理清楚,源程序结构合理、清晰,注
释说明完整,有对本次课程设计的心得体会。
(2)良包括设计内容,设计思想,已经完成的任务及达到的目标,
设计思路基本清晰、书写条理基本清楚,源程序结构合理、
清晰,注释说明基本完整,有对本次课程设计的心得体会。
(3)中课程设计报告内容基本完整,思路较清晰,书写基本清楚,
源程序结构尚可,有注释说明但不完整
(4)及格课程设计报告内容基本完整,思路较差,书写尚清楚。
(5)不及格课程设计报告内容不完整,书写没有条理。
3、回答教师提问:
(1)优能回答教师提出的所有问题,并完全正确,思路清晰
(2)良基本能回答教师提出的所有问题,有些小错误
(3)中基本能回答教师提出的问题,少数问题回答错误或不清楚
(4)及格能回答教师提出的问题,但较多问题回答错误或不能回答
(5)不及格基本不能回答教师提出的问题
一、实验目的
掌握数字图像处理的基本原理。
二、实验总体设计(流程图)
写出数字图像处理各功能代码
↓
设计程序整合各功能
三、实验详细设计(各个功能模块设计及实现主要函数)
程序如下,包括图像缩放
图象灰度化
图像的Canny边缘检测
图象二值化
图象自适应二值化
灰度直方图
彩色直方图
灰度直方图均衡化
四、实验结果与分析
各功能成功实现满足图像处理使用要求。
五、实验心得
通过这次实验,进一步巩固了数字图像处理系统中的基本原理与方法,
并熟悉了opencv的功能与应用,进一步提高了编程实践能力。
学习很有成果
六、主要代码
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#pragmacomment(linker,"/subsystem:
\"windows\"/entry:
\"mainCRTStartup\"")
//图象缩放
intmain()
{
constchar*pstrImageName="小白.jpeg";
//constchar*pstrWindowsTitle="MYTEST1!
";
constchar*pstrSaveImageName="小白缩放图.jpeg";
constchar*pstrWindowsSrcTitle="原图";
constchar*pstrWindowsDstTitle="缩放图";
doublefScale=0.785;//缩放倍数
CvSizeczSize;//目标图象尺寸
//从文件中读取图像
IplImage*pSrcImage=cvLoadImage(pstrImageName,CV_LOAD_IMAGE_UNCHANGED);
IplImage*pDstImage=NULL;
//计算图象大小
czSize.width=int(pSrcImage->width*fScale);
czSize.height=int(pSrcImage->height*fScale);
//创建图象并缩放
pDstImage=cvCreateImage(czSize,pSrcImage->depth,pSrcImage->nChannels);
cvResize(pSrcImage,pDstImage,CV_INTER_AREA);
//创建窗口
cvNamedWindow(pstrWindowsSrcTitle,CV_WINDOW_AUTOSIZE);
cvNamedWindow(pstrWindowsDstTitle,CV_WINDOW_AUTOSIZE);
//在指定窗口中显示图像
cvShowImage(pstrWindowsSrcTitle,pSrcImage);
cvShowImage(pstrWindowsDstTitle,pDstImage);
//等待按键事件
cvWaitKey();
//保存图象
cvSaveImage(pstrSaveImageName,pDstImage);
//释放图象
cvDestroyWindow(pstrWindowsSrcTitle);
cvDestroyWindow(pstrWindowsDstTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pDstImage);
return0;
}
//图象灰度化
/*
intmain(intargc,char*argv[])
{
constchar*imagename="小白.jpeg";
constchar*imageTitle="原图小白";
constchar*imagename1="灰度小白.jpeg";
constchar*imageTitle1="灰度小白";
//读取图象
IplImage*img=cvLoadImage(imagename);
if(!
img)
{
fprintf(stderr,"Cannotloadimage%s\n",imagename);
return-1;
}
if(!
img->imageData)//检查是否正确载入图像
return-1;
cvNamedWindow(imageTitle,CV_WINDOW_AUTOSIZE);//创建窗口
cvShowImage(imageTitle,img);//指定窗口显示图像
//创建目标图像
IplImage*img1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvCvtColor(img,img1,CV_BGR2GRAY);//灰度化
cvNamedWindow(imageTitle1,CV_WINDOW_AUTOSIZE);//创建显示目标的窗口
cvShowImage(imageTitle1,img1);//显示灰度图像
cvWaitKey();//等待按键事件
cvSaveImage(imagename1,img1);//保存图象
//释放图象
cvReleaseImage(&img);
cvReleaseImage(&img1);
cvDestroyAllWindows();
return0;
}
*/
//图像的Canny边缘检测
/*
IplImage*g_pSrcImage,*g_pCannyImg;//定义图象指针
constchar*pstrWindowsCannyTitle="边缘检测图";
//cvCreateTrackbar的回调函数
voidon_trackbar(intthreshold)
{
//canny边缘检测
cvCanny(g_pSrcImage,g_pCannyImg,threshold,threshold*3,3);
cvShowImage(pstrWindowsCannyTitle,g_pCannyImg);//显示图象
}
intmain()
{
constchar*pstrImageName="小白灰度图.jpeg";
constchar*pstrWindowsSrcTitle="原图";
constchar*pstrWindowsToolBar="Threshold";
constchar*pstrImageCannyName="小白边缘检测图.jpeg";
//从文件中载入图像的灰度图CV_LOAD_IMAGE_GRAYSCALE-灰度图
g_pSrcImage=cvLoadImage(pstrImageName,CV_LOAD_IMAGE_GRAYSCALE);
g_pCannyImg=cvCreateImage(cvGetSize(g_pSrcImage),IPL_DEPTH_8U,1);
//创建窗口
cvNamedWindow(pstrWindowsSrcTitle,CV_WINDOW_AUTOSIZE);
cvNamedWindow(pstrWindowsCannyTitle,CV_WINDOW_AUTOSIZE);
//创建滑动条
intnThresholdEdge=1;
cvCreateTrackbar(pstrWindowsToolBar,pstrWindowsCannyTitle,&nThresholdEdge,100,on_trackbar);
//在指定窗口中显示图像
cvShowImage(pstrWindowsSrcTitle,g_pSrcImage);
on_trackbar
(1);
//等待按键事件
cvWaitKey();
cvSaveImage(pstrImageCannyName,g_pCannyImg);
cvDestroyWindow(pstrWindowsSrcTitle);
cvDestroyWindow(pstrWindowsCannyTitle);
cvReleaseImage(&g_pSrcImage);
cvReleaseImage(&g_pCannyImg);
return0;
}
*/
//图象二值化
/*
IplImage*g_pGrayImage=NULL;
IplImage*g_pBinaryImage=NULL;
constchar*pstrWindowsBinaryTitle="二值图";
voidon_trackbar(intpos)
{
//转为二值图
cvThreshold(g_pGrayImage,g_pBinaryImage,pos,255,CV_THRESH_BINARY);
//显示二值图
cvShowImage(pstrWindowsBinaryTitle,g_pBinaryImage);
}
intmain(intargc,char**argv)
{
constchar*pstrWindowsSrcTitle="原图";
constchar*pstrWindowsToolBarName="二值图阈值";
//从文件中加载原图
IplImage*pSrcImage=cvLoadImage("小白.jpeg",CV_LOAD_IMAGE_UNCHANGED);
//转为灰度图
g_pGrayImage=cvCreateImage(cvGetSize(pSrcImage),IPL_DEPTH_8U,1);
cvCvtColor(pSrcImage,g_pGrayImage,CV_BGR2GRAY);
//创建二值图
g_pBinaryImage=cvCreateImage(cvGetSize(g_pGrayImage),IPL_DEPTH_8U,1);
//显示原图
cvNamedWindow(pstrWindowsSrcTitle,CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsSrcTitle,pSrcImage);
//创建二值图窗口
cvNamedWindow(pstrWindowsBinaryTitle,CV_WINDOW_AUTOSIZE);
//滑动条
intnThreshold=0;
cvCreateTrackbar(pstrWindowsToolBarName,pstrWindowsBinaryTitle,&nThreshold,254,on_trackbar);
on_trackbar
(1);
cvWaitKey(0);
cvSaveImage("小白二值图.jpeg",g_pBinaryImage);
cvDestroyWindow(pstrWindowsSrcTitle);
cvDestroyWindow(pstrWindowsBinaryTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&g_pGrayImage);
cvReleaseImage(&g_pBinaryImage);
return0;
}
*/
//图象自适应二值化
/*
intmain(intargc,char**argv)
{
IplImage*g_pBinaryImage;
constchar*pstrWindowsBinaryTitle="二值图";
constchar*pstrWindowsSrcTitle="灰度图";
constchar*pstrImageSrcName="小白灰度图.jpeg";
constchar*pstrImageBinaryName="小白自适应二值化.jpeg";
if(argc!
=7)
{
return-1;
}
intthreshold_type=atoi(argv[2])?
CV_THRESH_BINARY:
CV_THRESH_BINARY_INV;
intadaptive_method=atoi(argv[3])?
CV_ADAPTIVE_THRESH_MEAN_C:
CV_ADAPTIVE_THRESH_GAUSSIAN_C;
intblock_size=atoi(argv[4]);
doubleoffset=(double)atof(argv[5]);
//读取灰度图
IplImage*g_pGrayImage=cvLoadImage(pstrImageSrcName,CV_LOAD_IMAGE_GRAYSCALE);
//创建二值图
g_pBinaryImage=cvCreateImage(cvGetSize(g_pGrayImage),IPL_DEPTH_8U,1);
cvAdaptiveThreshold(g_pGrayImage,g_pBinaryImage,255,adaptive_method,threshold_type,block_size,offset);
//显示原图
cvNamedWindow(pstrWindowsSrcTitle,CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsSrcTitle,g_pGrayImage);
//创建二值图窗口
cvNamedWindow(pstrWindowsBinaryTitle,CV_WINDOW_AUTOSIZE);
cvWaitKey(0);
cvSaveImage(pstrImageBinaryName,g_pBinaryImage);
cvDestroyWindow(pstrWindowsSrcTitle);
cvDestroyWindow(pstrWindowsBinaryTitle);
cvReleaseImage(&g_pGrayImage);
cvReleaseImage(&g_pBinaryImage);
return0;
}
*/
//灰度直方图
/*
voidFillWhite(IplImage*pImage)
{
cvRectangle(pImage,cvPoint(0,0),cvPoint(pImage->width,pImage->height),CV_RGB(255,255,255),CV_FILLED);
}
//创建灰度图像的直方图
CvHistogram*CreateGrayImageHist(IplImage**ppImage)
{
intnHistSize=256;
floatfRange[]={0,255};//灰度级的范围
float*pfRanges[]={fRange};
CvHistogram*pcvHistogram=cvCreateHist(1,&nHistSize,CV_HIST_ARRAY,pfRanges);
cvCalcHist(ppImage,pcvHistogram);
returnpcvHistogram;
}
//根据直方图创建直方图图像
IplImage*CreateHisogramImage(intnImageWidth,intnScale,intnImageHeight,CvHistogram*pcvHistogram)
{
IplImage*pHistImage=cvCreateImage(cvSize(nImageWidth*nScale,nImageHeight),IPL_DEPTH_8U,1);
FillWhite(pHistImage);
//统计直方图中的最大直方块
floatfMaxHistValue=0;
cvGetMinMaxHistValue(pcvHistogram,NULL,&fMaxHistValue,NULL,NULL);
//分别将每个直方块的值绘制到图中
inti;
for(i=0;i { floatfHistValue=cvQueryHistValue_1D(pcvHistogram,i);//像素为i的直方块大小 intnRealHeight=cvRound((fHistValue/fMaxHistValue)*nImageHeight);//要绘制的高度 cvRectangle(pHistImage, cvPoint(i*nScale,nImageHeight-1), cvPoint((i+1)*nScale-1,nImageHeight-nRealHeight), cvScalar(i,0,0,0), CV_FILLED ); } returnpHistImage; } intmain(intargc,char**argv) { constchar*pstrWindowsSrcTitle="原图"; constchar*pstrWindowsGrayTitle="灰度图"; constchar*pstrWindowsHistTitle="直方图"; //从文件中加载原图 IplImage*pSrcImage=cvLoadImage("小白.jpeg",CV_LOAD_IMAGE_UNCHANGED); IplImage*pGrayImage=cvCreateImage(cvGetSize(pSrcImage),IPL_DEPTH_8U,1); //灰度图 cvCvtColor(pSrcImage,pGrayImage,CV_BGR2GRAY); //灰度直方图 CvHistogram*pcvHistogram=CreateGrayImageHist(&pGrayImage); //创建直方图图像 intnHistImageWidth=255; intnHistImageHeight=150;//直方图图像高度 intnScale=2; IplImage*pHistImage=CreateHisogramImage(nHistImageWidth,nScale,nHistImageHeight,pcvHistogram); //显示 cvNamedWindow(pstrWindowsSrcTitle,CV_WINDOW_AUTOSIZE); c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 课程设计 报告