




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字图像处理 课程设计多功能图像处理软件包指导教师:xxxxxxxxxx班级:xxxxxxxxxxxx学号:xxxxxxxxxxxxx姓名:xxxx数字图像处理课程设计任务书一、题目:多功能图像处理软件包二、目的:1、提高分析问题、解决问题的能力,进一步巩固数字图像处理系统中的基本原理与方法。2、熟悉掌握一门计算机语言,可以进行数字图像的应用处理的开发设计。三、要求3.1总体要求 1、要充分认识课程设计对培养自己的重要性,认真做好设计前的各项准备工作。尤其是对编程软件的使用有基本的认识。2、既要虚心接受老师的指导,又要充分发挥主观能动性。结合课题,独立思考,努力钻研,勤于实践,勇于创新。3、独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。4、在设计过程中,要严格要求自己,树立严肃、严密、严谨的科学态度,必须按时、按质、按量完成课程设计。3.2实施要求1、理解各种图像处理方法确切意义。2、独立进行方案的制定,系统结构设计要合理。3、在程序开发时,则必须清楚主要实现函数的目的和作用,需要在程序书写时说明做适当的注释。使用Visual C+来进行开发,要理解每个函数的具体意义和适用范围,在写课设报告时,必须要将主要函数的功能和参数做详细的说明。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) 不及格基本不能回答教师提出的问题2一、实验目的掌握数字图像处理的基本原理。二、实验总体设计(流程图)写出数字图像处理各功能代码设计程序整合各功能三、实验详细设计(各个功能模块设计及实现主要函数)程序如下,包括图像缩放图象灰度化图像的Canny边缘检测图象二值化图象自适应二值化灰度直方图彩色直方图灰度直方图均衡化四、实验结果与分析各功能成功实现满足图像处理使用要求。五、实验心得通过这次实验,进一步巩固了数字图像处理系统中的基本原理与方法,并熟悉了opencv的功能与应用,进一步提高了编程实践能力。学习很有成果六、主要代码#include #include #include #include #include #include #include using namespace std;#pragma comment(linker, /subsystem:windows /entry:mainCRTStartup)/图象缩放int main()const char *pstrImageName = 小白.jpeg;/const char *pstrWindowsTitle = MY TEST1!;const char *pstrSaveImageName = 小白缩放图.jpeg;const char *pstrWindowsSrcTitle = 原图;const char *pstrWindowsDstTitle = 缩放图;double fScale = 0.785; /缩放倍数CvSize czSize; /目标图象尺寸/从文件中读取图像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);return 0;/图象灰度化/*int main(int argc, char* argv)const char* imagename = 小白.jpeg;const char* imageTitle = 原图小白;const char* imagename1 = 灰度小白.jpeg;const char* imageTitle1 = 灰度小白;/读取图象IplImage * img = cvLoadImage(imagename);if (!img)fprintf(stderr, Can not load image %sn, 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();return 0;*/图像的Canny边缘检测/*IplImage *g_pSrcImage, *g_pCannyImg; /定义图象指针const char *pstrWindowsCannyTitle = 边缘检测图;/cvCreateTrackbar的回调函数void on_trackbar(int threshold)/canny边缘检测cvCanny(g_pSrcImage, g_pCannyImg, threshold, threshold * 3, 3);cvShowImage(pstrWindowsCannyTitle, g_pCannyImg); /显示图象int main()const char *pstrImageName = 小白灰度图.jpeg;const char *pstrWindowsSrcTitle = 原图;const char *pstrWindowsToolBar = Threshold;const char *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);/创建滑动条int nThresholdEdge = 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);return 0;*/图象二值化/*IplImage *g_pGrayImage = NULL;IplImage *g_pBinaryImage = NULL;const char *pstrWindowsBinaryTitle = 二值图;void on_trackbar(int pos)/ 转为二值图cvThreshold(g_pGrayImage, g_pBinaryImage, pos, 255, CV_THRESH_BINARY);/ 显示二值图cvShowImage(pstrWindowsBinaryTitle, g_pBinaryImage);int main(int argc, char* argv)const char *pstrWindowsSrcTitle = 原图;const char *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);/ 滑动条int nThreshold = 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);return 0;*/图象自适应二值化/*int main(int argc, char* argv)IplImage *g_pBinaryImage;const char *pstrWindowsBinaryTitle = 二值图;const char *pstrWindowsSrcTitle = 灰度图;const char *pstrImageSrcName = 小白灰度图.jpeg;const char *pstrImageBinaryName = 小白自适应二值化.jpeg;if (argc != 7)return -1;int threshold_type = atoi(argv2) ? CV_THRESH_BINARY : CV_THRESH_BINARY_INV;int adaptive_method = atoi(argv3) ? CV_ADAPTIVE_THRESH_MEAN_C : CV_ADAPTIVE_THRESH_GAUSSIAN_C;int block_size = atoi(argv4);double offset = (double)atof(argv5);/ 读取灰度图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);return 0;*/灰度直方图/*void FillWhite(IplImage *pImage)cvRectangle(pImage, cvPoint(0, 0), cvPoint(pImage-width, pImage-height), CV_RGB(255, 255, 255), CV_FILLED);/ 创建灰度图像的直方图CvHistogram* CreateGrayImageHist(IplImage *ppImage)int nHistSize = 256;float fRange = 0, 255 ; /灰度级的范围 float *pfRanges = fRange ;CvHistogram *pcvHistogram = cvCreateHist(1, &nHistSize, CV_HIST_ARRAY, pfRanges);cvCalcHist(ppImage, pcvHistogram);return pcvHistogram;/ 根据直方图创建直方图图像IplImage* CreateHisogramImage(int nImageWidth, int nScale, int nImageHeight, CvHistogram *pcvHistogram)IplImage *pHistImage = cvCreateImage(cvSize(nImageWidth * nScale, nImageHeight), IPL_DEPTH_8U, 1);FillWhite(pHistImage);/统计直方图中的最大直方块float fMaxHistValue = 0;cvGetMinMaxHistValue(pcvHistogram, NULL, &fMaxHistValue, NULL, NULL);/分别将每个直方块的值绘制到图中int i;for (i = 0; i nImageWidth; i+)float fHistValue = cvQueryHistValue_1D(pcvHistogram, i); /像素为i的直方块大小int nRealHeight = 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);return pHistImage;int main(int argc, char* argv)const char *pstrWindowsSrcTitle = 原图;const char *pstrWindowsGrayTitle = 灰度图;const char *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);/ 创建直方图图像int nHistImageWidth = 255;int nHistImageHeight = 150; /直方图图像高度int nScale = 2;IplImage *pHistImage = CreateHisogramImage(nHistImageWidth, nScale, nHistImageHeight, pcvHistogram);/ 显示cvNamedWindow(pstrWindowsSrcTitle, CV_WINDOW_AUTOSIZE);cvNamedWindow(pstrWindowsGrayTitle, CV_WINDOW_AUTOSIZE);cvNamedWindow(pstrWindowsHistTitle, CV_WINDOW_AUTOSIZE);cvShowImage(pstrWindowsSrcTitle, pSrcImage);cvShowImage(pstrWindowsGrayTitle, pGrayImage);cvShowImage(pstrWindowsHistTitle, pHistImage);cvWaitKey(0);cvReleaseHist(&pcvHistogram);cvDestroyWindow(pstrWindowsSrcTitle);cvDestroyWindow(pstrWindowsGrayTitle);cvDestroyWindow(pstrWindowsHistTitle);cvReleaseImage(&pSrcImage);cvReleaseImage(&pGrayImage);cvReleaseImage(&pHistImage);return 0;*/彩色直方图/*int main(int argc, char* argv)IplImage * src = cvLoadImage(小新.jpg);IplImage* hsv = cvCreateImage(cvGetSize(src), 8, 3);IplImage* h_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* s_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* v_plane = cvCreateImage(cvGetSize(src), 8, 1);IplImage* planes = h_plane, s_plane ;/ H 分量划分为16个等级,S分量划分为8个等级int h_bins = 16, s_bins = 8;int hist_size = h_bins, s_bins ;/ H 分量的变化范围 float h_ranges = 0, 180 ;/ S 分量的变化范围float s_ranges = 0, 255 ;float* ranges = h_ranges, s_ranges ;/ 输入图像转换到HSV颜色空间cvCvtColor(src, hsv, CV_BGR2HSV);cvCvtPixToPlane(hsv, h_plane, s_plane, v_plane, 0);/创建直方图,二维, 每个维度上均分CvHistogram * hist = cvCreateHist(2, hist_size, CV_HIST_ARRAY, ranges, 1);/ 根据H,S两个平面数据统计直方图 cvCalcHist(planes, hist, 0, 0);/ 获取直方图统计的最大值,用于动态显示直方图float max_value;cvGetMinMaxHistValue(hist, 0, &max_value, 0, 0);/ 设置直方图显示图像int height = 240;int width = (h_bins*s_bins * 6);IplImage* hist_img = cvCreateImage(cvSize(width, height), 8, 3);cvZero(hist_img);/ 用来进行HSV到RGB颜色转换的临时单位图像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 width, pImage-height), CV_RGB(255, 255, 255), CV_FILLED);/ 创建灰度图像的直方图CvHistogram* CreateGrayImageHist(IplImage *ppImage)int nHistSize = 256;float fRange = 0, 255 ; /灰度级的范围 float *pfRanges = fRange ;CvHistogram *pcvHistogram = cvCreateHist(1, &nHistSize, CV_HIST_ARRAY, pfRanges);cvCalcHist(ppImage, pcvHistogram);return pcvHistogram;/ 根据直方图创建直方图图像IplImage* CreateHisogramImage(int nImageWidth, int nScale, int nImageHeight, CvHistogram *pcvHistogram)IplImage *pHistImage = cvCreateImage(cvSize(nImageWidth * nScale, nImageHeight), IPL_DEPTH_8U, 1);FillWhite(pHistImage);/统计直方图中的最大直方块float fMaxHistValue = 0;cvGetMinMaxHistValue(pcvHistogram, NULL, &fMaxHistValue, NULL, NULL);/分别将每个直方块的值绘制到图中int i;for (i = 0; i nImageWidth; i+)float fHistValue = cvQueryHistValue_1D(pcvHistogram, i); /像素为i的直方块大小int nRealHeight = 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);return pHistImage;int main(int argc, char* argv)const char *pstrWindowsSrcTitle = 原图;const char *pstrWindowsGrayTitle = 灰度图;const char *pstrWindowsHistTitle = 直方图;const char *pstrWindowsGrayEqualizeTitle = 灰度图-均衡化后;const char *pstrWindowsHistEqualizeTitle = 直方图-均衡化后;/ 从文件中加载原图IplImage *pSrcImage = cvLoadImage(小白.jpeg, CV_LOAD_IMAGE_UNCHANGED);IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);IplImage *pGrayEqualizeImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);/ 灰度图cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人液体疗法课件
- 酿酒专业知识培训课程课件
- 实验:探究加速度与物体受力、物体质量的关系(复习讲义)-2026年高考物理一轮复习(北京专用)解析版
- 完形填空(10空)原卷版-2023学年八年级英语下学期
- 实数性质与实数运算(3大知识点+10大典例+变式训练+过关检测)原卷版-2025年新八年级数学暑假提升讲义(北师大版)
- 第四单元 第九课 中国与国际组织2026年高三政治第一轮总复习
- 酸碱中和反应的说课课件
- 人教版八年级英语上册同步讲义 Unit4 Section A(含答案解析)
- 老山界优翼课件
- 老人烧烫伤安全培训知识课件
- 2025-2026学年沪教版(2024)初中音乐七年级上册教学计划及进度表
- 矿产勘查技术考核试卷
- 养老护理员全套培训课件
- 2025年河南省周口市辅警协警笔试笔试真题(含答案)
- 四川省成都市2025年中考数学试卷及答案
- 2025-2026学年人教精通版四年级英语上册(全册)教学设计(附目录)
- 2025-2026学年赣美版一年级美术上册(全册)教学设计(附目录 )
- 计算机应用技术职业发展路径
- 手术部位感染预防与控制标准操作
- 2022室外排水设施设计与施工-钢筋混凝土化粪池22S702
- 中职《机械基础》全套课件(完整版)
评论
0/150
提交评论