已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国地质大学(武汉)数字图像处理实验报告 学 院: 班 级: 姓 名: 学 号: 指导老师:1 实验目的 用C语言实现用直接灰度变换改变图像(求反,增强对比度,动态范围压缩,灰度切分)2 实验过程 弄明白自己的任务之后,去尝试自己写出这个程序时,却毫无头绪。之后紧接着的考试,我慢慢忘了,我还有这个任务。快到5月1号的时候,我和徐明权商量 程序到手以后,还算是比较认真的研究了程序,一共4个程序,每个程序也只能明白其中的一些基本语句。更多的,还是看不懂,搞不明白干嘛的。我就把不懂的语句用百度搜索,字面意思倒能看明白,若是让我自己运用编写的话,又会是一筹莫展了。不过,通过查阅,了解到了如果要用C语言实现用直接灰度变换改变图像(求反,增强对比度,动态范围压缩,灰度切分),需要使用Opencv中的IplImage结构 ,opencv是一个基于(开源)发行的跨平台计算机视觉库, 由一系列 C 函数和少量 C+ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。在IplImage结构中,有5个常用的函数 图像载入函数函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下:IplImage* cvLoadImage( const char* filename, int iscolor);其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。2. 窗口定义函数函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:int cvNamedWindow( const char* name, unsigned long flags );其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。3. 图像显示函数函数cvShowImage是在指定的窗口中显示图像,其函数原型如下:void cvShowImage( const char* name, const CvArr* image );其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。4. 图像保存函数函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下:int cvSaveImage( const char* filename, const CvArr* image );其中,filename是图像保存路径和名称,image是IplImage指针变量。5. 图像销毁函数函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下:void cvReleaseImage( IplImage* image );其中,image为已定义的IplImage指针。还有部分获取图片参数的部分:int origin; /*图像原点位置: 0表示顶-左结构,1表示底-左结构 */int align; /* 图像行排列方式 (4 or 8),在 OpenCV 被忽略,使用 widthStep 代替 */int width; /* 图像宽像素数 */int height; /* 图像高像素数*/了解了这些函数,算是我唯一的收获了,因为还有好多语句没弄懂,所以整个程序也没能明白透彻。3 参考资料 百度百科4 附程序 实现动态范围压缩:#include cv.h#include highgui.h#include cxcore.h int main() IplImage* src = NULL; /加载图片至内存 src = cvLoadImage(hd.jpg,0); if (NULL = src) return -1; /获取图片的一些属性 int height = src-height; / 图像高度 int width = src-width; / 图像宽度(像素为单位) int step = src-widthStep; / 相邻行的同列点之间的字节数 int channels = src-nChannels; / 颜色通道数目 (1,2,3,4) uchar *data = (uchar *)src-imageData; cvNamedWindow(原图); /创建名为“反色”的对话框 cvNamedWindow(动态压缩); cvShowImage(原图,src); /反色操作 for(int i=0;i != height; + i) for(int j=0;j != width; + j) for(int k=0;k != channels; + k) int c=255/log(256); datai*step+j*channels+k=c*log(datai*step+j*channels+k+1); /将图片显示到对话框中 cvShowImage(动态压缩,src); cvWaitKey(0); /释放内存与对话框销毁 cvReleaseImage(&src); cvDestroyWindow(原图); cvDestroyWindow(动态压缩); return 0; 实现对比度:#include highgui.h int ContrastAdjust(const IplImage* srcImg, IplImage* dstImg, float nPercent) assert(srcImg != NULL); assert(dstImg != NULL); int x,y,i; float val; for (i = 0; i 3; i+)/彩色图像需要处理3个通道,灰度图像这里可以删掉 for (y = 0; y height; y+) for (x = 0; x width; x+) val = (uchar*)(srcImg-imageData + srcImg-widthStep*y)x*3+i; val = 128 + (val - 128) * nPercent; /对灰度值的可能溢出进行处理 if(val255) val=255; if(valimageData + dstImg-widthStep*y)x*3+i = (uchar)val; return 0; int main(int argc, char* argv) IplImage* srcImg = cvLoadImage(g:opencv12.jpg); assert( srcImg != NULL ); IplImage* contrastImg = cvCloneImage(srcImg); /对比度变换,数值小于1降低对比度,大于1增强对比度 ContrastAdjust(srcImg, contrastImg, 1.3f); cvNamedWindow(Source,CV_WINDOW_AUTOSIZE); cvNamedWindow(ContrastAdjust,CV_WINDOW_AUTOSIZE); cvShowImage(Source,srcImg); cvShowImage(ContrastAdjust,contrastImg); cvWaitKey(0); cvReleaseImage(&srcImg); cvReleaseImage(&contrastImg); cvDestroyWindow(Source); cvDestroyWindow(ContrastAdjustrast); return 0; 实现求反:#include cv.h#include highgui.h#include cxcore.h int main() IplImage* src = NULL; /加载图片至内存 src = cvLoadImage(g:opencv12.jpg); if (NULL = src) return -1; /获取图片的一些属性 int height = src-height; / 图像高度 int width = src-width; / 图像宽度(像素为单位) int step = src-widthStep; / 相邻行的同列点之间的字节数 int channels = src-nChannels; / 颜色通道数目 (1,2,3,4) uchar *data = (uchar *)src-imageData; cvNamedWindow(原图,0); cvResizeWindow(原图,600,800); /创建名为“反色”的对话框 cvNamedWindow(反色,0); cvResizeWindow(反色,600,800); cvShowImage(原图,src); /反色操作 for(int i=0;i != height; + i) for(int j=0;j != width; + j) for(int k=0;k != channels; + k) datai*step+j*channels+k=255-datai*step+j*channels+k; /将图片显示到对话框中 cvShowImage(反色,src); cvWaitKey(0); /释放内存与对话框销毁 cvReleaseImage(&src); cvDestroyWindow(原图); cvDestroyWindow(反色); return 0; 实现灰度切分:#include cv.h#include highgui.h#include cxcore.h int main() IplImage* src = NULL; /加载图片至内存 src = cvLoadImage(g:opencv4.jpg); if (NULL = src) return -1; /获取图片的一些属性 int height = src-height; / 图像高度 int width = src-width; / 图像宽度(像素为单位) int step = src-widthStep; / 相邻行的同列点之间的字节数 int channels = src-nChannels; / 颜色通道数目 (1,2,3,4) uchar *data = (uchar *)src-imageData; cvNamedWindow(原图); /创建名为“反色”的对话框 cvNamedWindow(灰度切换); cvShowImage(原图,src); /反色操作 for(int i=0;i != height; + i) for(int j=0;j != width; + j) for(int k=0;k != channels; + k) if(datai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 20143-2026灯最大外形尺寸图的制定程序
- 2026年秋季英语专业开学第一课 专业素养与核心竞争力课件
- 2026年秋季开学幼儿园会操表演训练课件
- 2026年秋季开学高中秋分节气文化课件
- 2026新高二数学暑假专题:复习(2):平面向量及其应用
- 基于区块链的供应链可视化与韧性提升研究
- 家族办公室在耐心资本领域的投资实践研究
- 区块链技术赋能供应链透明度提升与韧性增强的机制研究
- 人工智能驱动的企业数字化转型机制与策略研究
- 基于大数据的盈利能力智能诊断模型构建
- 2026湖北黄石市阳新县事业单位统一招聘107人考试参考题库及答案详解
- 2026年新疆事业单位招聘考试《职业能力倾向测验》真题
- 2026年天津卷高考语文作文全新真题解读及五篇范文
- 2026年高考全国1卷语文高考真题含答案
- 易制爆安全教育培训制度
- 班主任经验分享勤严细实工作交流
- 2025-2026学年福建省福州市鼓楼区屏东中学九年级(上)开学数学试卷(含答案)
- 电子行业国际标准J-STD-020中文版
- 房屋市政工程有限空间作业安全管理指南
- QGDW1168-2013输变电设备状态检修试验规程
- 探伤检测合同协议
评论
0/150
提交评论