logo资料库

数字图像处理课程设计--一个简单的“photoshop”软件.doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
数 字 图 像 处 理 — 一 个 简 单 的 “photoshop”软件 设计分析: Photoshop 的处理图像的基本功能有:锐化、模糊、亮 度、对比度、gamma 调整、去色、RGB 色调调整、缩放、 旋转、裁剪等。 现通过 MFC 编程实现 photoshop 功能,设计中实现了 垂直镜像、雾化、浮雕、直方图均衡化的效果功能。 设计过程与结果: 1、 垂直镜像 是指把定义好的图像区域上下翻转地显示在屏幕 上。分析图像垂直镜像的过程,可发现每行的图像信息都保 持不变,而只是改变了行的顺序,将第一行与最后的第 n 行 相互交换,第二行与第 n - 1 行交换……,依此类推,从而 实现了图像的垂直镜像。只需采用按行交换的方式,即可方 便地修改缓冲区内容,实现图像的垂直镜像。 主要实现代码: void CTestView::Onreverse() //垂直镜像 { if(!m_dib.m_bLoaded) //判断图像是否打开,没打开,则弹
出提示框并退出函数 { } AfxMessageBox("图像还打开,请先打开图像!"); return; int nw=m_dib.GetDIBWidth(); //获取图像宽和高 int nh=m_dib.GetDIBHeight(); int i,j; //i 表示列,j 表示行 byte *ptemp=(byte *)new byte[nw*nh];//开辟一个新的缓冲区 memset(ptemp,0,nw*nh); //设置为 0,清缓冲区 for(j=0;j
2、雾化 在图像中引入一定的随机值,打乱图像中的像素值 实现代码: void CTestView::Onatomization() //雾化 { if(!m_dib.m_bLoaded) 则弹出提示框并退出函数 //判断图像是否打开,没打开, { } AfxMessageBox("图像还打开,请先打开图像!"); return; int nw=m_dib.GetDIBWidth(); int nh=m_dib.GetDIBHeight(); //获取图像宽和高
//i 表示列,j 表行 int i,j,k,dat; byte *ptemp=(byte *)new byte[nw*nh]; memset(ptemp,0,nw*nh); for(j=0;j=nw*nh) dat=nw*nh-1; ptemp[j*nw+i]=m_dib.m_pdata[dat]; } memcpy(m_dib.m_pdata,ptemp,nw*nh); m_dib.UpdateData(); Invalidate(); //刷新屏幕 } 效果图:
3、浮雕 浮雕"图象效果是指图像的前景前向凸出背景。所谓的"浮雕" 概念是指标绘图像上的一个像素和它左上方的那个像素之间差值的 一种处理过程,为了使图像保持一定的亮度并呈现灰色,我在处理过 程中为这个差值加了一个数值为 128 的常量。这样颜色变化大的 地方色彩就明显,颜色变化小的地方因为差值几乎为零则成 黑色。需要注意的是,当设置一个像素值的时候,它和它左上方的 像素都要被用到,为了避免用到已经设置过的像素,应该从图像的右 下方的像素开始处理。 实现代码: void CTestView::Onembossment() //浮雕 { if(!m_dib.m_bLoaded) //判断图像是否打开,没打开,则弹出提示框并退出 函数 { AfxMessageBox("图像还打开,请先打开图像!");return;
//获取图像宽和高 } int nw=m_dib.GetDIBWidth(); int nh=m_dib.GetDIBHeight(); int i,j,temp; byte *ptemp=(byte *)new byte[nw*nh]; memset(ptemp,0,nw*nh); for(j=nh-1;j>0;j--) //i 表示列,j 表示行 //设置为 0 for(i=nw-1;i>0;i--) { temp=m_dib.m_pdata[j*nw+i]-m_dib.m_pdata[(j-1)*nw+i-1]+128; if(temp>255) temp=255; if(temp<0) temp=0; ptemp[j*nw+i]=temp; } memcpy(m_dib.m_pdata,ptemp,nw*nh); m_dib.UpdateData(); Invalidate(); } //刷新屏幕 效果图:
分享到:
收藏