数字图像处理技术实验二报告.docx
- 文档编号:30380546
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:21
- 大小:473.60KB
数字图像处理技术实验二报告.docx
《数字图像处理技术实验二报告.docx》由会员分享,可在线阅读,更多相关《数字图像处理技术实验二报告.docx(21页珍藏版)》请在冰豆网上搜索。
数字图像处理技术实验二报告
深圳大学实验报告
课程名称:
数字图像处理
实验项目名称:
实验二图像特效显示实验
学院:
计算机与软件学院
专业:
软件工程
指导教师:
沈琳琳
报告人:
文成学号:
2011150259班级:
02
实验时间:
2014-04-01
实验报告提交时间:
2014-04-01
教务部制
实验目的:
⏹掌握图像特效显示原理
⏹掌握开/关门特效显示实现方法
⏹掌握百叶窗特效显示实现方法
⏹掌握淡入/出特效显示实现方法
实验要求:
⏹熟悉C++语言编程
⏹熟练使用C++语言实现图像文件的读取操作
⏹熟练使用C++语言实现无格式RAW图像显示方法
实验内容:
1、显示图像部分(矩形)区域函数
2、实现开/关门特效显示函数
⏹由中间向左右(开门)显示
⏹由左右向中间(关门)显示
⏹由中间向上下(开门)显示
⏹由上下向中间(关门)显示
3、实现百叶窗特效显示函数
⏹向右显示
⏹向左显示
⏹向下显示
⏹向上显示
4、实现淡入/淡出特效显示函数
方法、步骤:
生成一个Window运行程序
使用VisualC++的参考步骤:
1)打开VC++编译环境
2)点击File菜单项
3)点击New
4)选择Application[必须先输入projectname,如BmpIO]
5)再选择Atypical“HelloWorld!
”Application
最后打开C源程序[ImageProcessing.cpp],编写各个函数
编写好各函数和菜单项后,按“!
”,即可生成Parent.exe运行程序。
变量说明
HDChWinDC;//图像显示区域
charOrgImage[1024*1024];//图像数据
#defineIMAGEWIDTH256//默认图像宽度
#defineIMAGEHEIGHT256//默认图像高度
#defineXPOS100//默认图像显示位置
#defineYPOS100
#defineSHUTTERNUM10
#defineGRAYCHANGENUM5
HWNDhWind;//窗口句柄
显示图像部分(矩形)区域函数:
由中间向左右(开门)显示函数
由上向下百叶窗显示函数
淡入显示函数
实验结果:
程序主函数:
做出的图像特效:
先显示图片
淡入效果
淡出效果
向左右开门
图像从中间向两边显示。
同理上下开门只需要修改函数
由上向下百叶窗
因为图像是分成7个区域显示的,会出现线条,有白色线条的部分没有显示出来
同理由左向右百叶窗的函数
附件:
ImageProcessing.cpp
//ImageProcessing.cpp:
Definestheentrypointfortheapplication.
//
#include"stdafx.h"
#include"resource.h"
#defineMAX_LOADSTRING100
//GlobalVariables:
HINSTANCEhInst;//currentinstance
TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext
TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext
//Fowarddeclarationsoffunctionsincludedinthiscodemodule:
ATOMMyRegisterClass(HINSTANCEhInstance);
BOOLInitInstance(HINSTANCE,int);
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);
HDChWinDC;//图像显示区域
charOrgImage[1024*1024];//图像数据
#defineIMAGEWIDTH256//默认图像宽度
#defineIMAGEHEIGHT256//默认图像高度
#defineXPOS100//默认图像显示位置
#defineYPOS100
#defineSHUTTERNUM10
#defineGRAYCHANGENUM5
HWNDhWind;//窗口句柄
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//TODO:
Placecodehere.
MSGmsg;
HACCELhAccelTable;
//Initializeglobalstrings
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_IMAGEPROCESSING,szWindowClass,MAX_LOADSTRING);
MyRegisterClass(hInstance);
//Performapplicationinitialization:
if(!
InitInstance(hInstance,nCmdShow))
{
returnFALSE;
}
hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDC_IMAGEPROCESSING);
//Mainmessageloop:
while(GetMessage(&msg,NULL,0,0))
{
if(!
TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
returnmsg.wParam;
}
//
//FUNCTION:
MyRegisterClass()
//
//PURPOSE:
Registersthewindowclass.
//
//COMMENTS:
//
//Thisfunctionanditsusageisonlynecessaryifyouwantthiscode
//tobecompatiblewithWin32systemspriortothe'RegisterClassEx'
//functionthatwasaddedtoWindows95.Itisimportanttocallthisfunction
//sothattheapplicationwillget'wellformed'smalliconsassociated
//withit.
//
ATOMMyRegisterClass(HINSTANCEhInstance)
{
WNDCLASSEXwcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance,(LPCTSTR)IDI_IMAGEPROCESSING);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName=(LPCSTR)IDC_IMAGEPROCESSING;
wcex.lpszClassName=szWindowClass;
wcex.hIconSm=LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);
returnRegisterClassEx(&wcex);
}
//
//FUNCTION:
InitInstance(HANDLE,int)
//
//PURPOSE:
Savesinstancehandleandcreatesmainwindow
//
//COMMENTS:
//
//Inthisfunction,wesavetheinstancehandleinaglobalvariableand
//createanddisplaythemainprogramwindow.
//
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)
{
HWNDhWnd;
hInst=hInstance;//Storeinstancehandleinourglobalvariable
hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
if(!
hWnd)
{
returnFALSE;
}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnTRUE;
}
//
//FUNCTION:
WndProc(HWND,unsigned,WORD,LONG)
//
//PURPOSE:
Processesmessagesforthemainwindow.
//
//WM_COMMAND-processtheapplicationmenu
//WM_PAINT-Paintthemainwindow
//WM_DESTROY-postaquitmessageandreturn
//
//
BOOLReadImage(LPSTRImageFileName,char*oImage,intwImage,inthImage)
//读取图像信息并保存在Image[][]中
{OFSTRUCTof;
HFILEImage_fp;
Image_fp=OpenFile(ImageFileName,&of,OF_READ);
if(Image_fp==HFILE_ERROR)
{MessageBox(NULL,ImageFileName,"打开文件出错信息",MB_OK);
returnFALSE;
}
_lread(Image_fp,oImage,wImage*hImage);
_lclose(Image_fp);
returnTRUE;
}
voidShowImage(char*Image,intwImage,inthImage,intxPos,intyPos)
{inti,j;
for(i=0;i for(j=0;j SetPixel(hWinDC,j+yPos,i+xPos, RGB(Image[i*wImage+j], Image[i*wImage+j], Image[i*wImage+j])); } } } voidShowImageRect(char*Image,intwImage,inthImage, intxPos,intyPos,RECTShowRect) {inti,j; intr,g,b; for(i=ShowRect.top;i for(j=ShowRect.left;j r=g=b=(BYTE)Image[i*wImage+j]; SetPixel(hWinDC,j+yPos,i+xPos,RGB(r,g,b)); }}} voidShowLeftRightOpen(char*Image,intwImage,inthImage,intxPos,intyPos) {inti; RECTShowRect; InvalidateRgn(hWind,NULL,TRUE);UpdateWindow(hWind);//清空窗口 ShowRect.top=0; ShowRect.bottom=hImage; for(i=0;i ShowRect.left=wImage/2-i; ShowRect.right=ShowRect.left+1;//显示一列 ShowImageRect(Image,wImage,hImage,xPos,yPos,ShowRect);//左开门 ShowRect.left=wImage/2+i; ShowRect.right=ShowRect.left+1;//显示一列 ShowImageRect(Image,wImage,hImage,xPos,yPos,ShowRect);//右开门 Sleep (1); }} voidShowtopbottomOpen(char*Image,intwImage,inthImage,intxPos,intyPos) {inti; RECTShowRect; InvalidateRgn(hWind,NULL,TRUE);UpdateWindow(hWind);//清空窗口 ShowRect.left=0; ShowRect.right=hImage; for(i=0;i ShowRect.top=hImage/2-i; ShowRect.bottom=ShowRect.top+1;//显示一行 ShowImageRect(Image,wImage,hImage,xPos,yPos,ShowRect);//上开门 ShowRect.top=hImage/2+i; ShowRect.bottom=ShowRect.top+1;//显示一行 ShowImageRect(Image,wImage,hImage,xPos,yPos,ShowRect);//下开门 Sleep (1); }} voidShowTopBottomShutter(char*Image,intwImage,inthImage,intxPos,intyPos) {inti,j; RECTShowRect; InvalidateRgn(hWind,NULL,TRUE);UpdateWindow(hWind);//清空窗口 ShowRect.left=0; ShowRect.right=hImage; for(i=0;i for(j=0;j ShowRect.top=i+(j*wImage/SHUTTERNUM); ShowRect.bottom=ShowRect.top+1;//显示一行 ShowImageRect(Image,wImage,hImage,xPos,yPos,ShowRect); Sleep (1); }}} voidShowLeftRightShutter(char*Image,intwImage,inthImage,intxPos,intyPos) {inti,j; RECTShowRect; InvalidateRgn(hWind,NULL,TRUE);UpdateWindow(hWind);//清空窗口 ShowRect.top=0; ShowRect.bottom=hImage; for(i=0;i for(j=0;j ShowRect.left=i+(j*hImage/SHUTTERNUM); ShowRect.right=ShowRect.left+1;//显示一列 ShowImageRect(Image,wImage,hImage,xPos,yPos,ShowRect); Sleep (1); }}} voidShowGrayToLow(char*Image,intwImage,inthImage,intxPos,intyPos) {inti,j,m;intr,g,b,gray; for(m=1;m for(i=0;i for(j=0;j gray=(BYTE)Image[i*wImage+j]; r=g=b=gray*(GRAYCHANGENUM-m)/GRAYCHANGENUM; SetPixel(hWinDC,j+yPos,i+xPos,RGB(r,g,b)); }}}} voidShowGrayToHigh(char*Image,intwImage,inthImage,intxPos,intyPos) {inti,j,m;intr,g,b,gray; for(m=1;m for(i=0;i for(j=0;j gray=(BYTE)Image[i*wImage+j]; r=g=b=gray*(GRAYCHANGENUM+m)/GRAYCHANGENUM; SetPixel(hWinDC,j+yPos,i+xPos,RGB(r,g,b)); }}}} LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam) { intwmId,wmEvent; PAINTSTRUCTps; HDChdc; TCHARszHello[MAX_LOADSTRING]; LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING); switch(message) { caseWM_COMMAND: hWind=hWnd;//获取窗口句柄 wmId=LOWORD(wParam); wmEvent=HIWORD(wParam); hWinDC=GetWindowDC(hWnd); //Parsethemenuselections: switch(wmId) { caseIDM_SHOWRAWIMAGE: ReadImage("D: \\lena256.raw",OrgImage,IMAGEWIDTH,IMAGEHEIGHT); ShowImage(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS); break; caseIDM_GRAYTOLOW: //淡入 ShowGrayToLow(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS);break; caseIDM_GRAYTOHIGH: //淡出 ShowGrayToHigh(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS);break; caseIDM_LEFTRIGHTOPEN: //向左右开门 ShowLeftRightOpen(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS);break; caseIDM_TOPBOTTOMOPEN: //向上下开门 ShowtopbottomOpen(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS);break; caseIDM_TBSHUTTER: //由上向下百叶窗 ShowTopBottomShutter(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS);break; caseIDM_LRSHUTTER: //由左向右百叶窗 ShowLeftRightShutter(OrgImage,IMAGEWIDTH,IMAGEHEIGHT,XPOS,YPOS);break; caseIDM_ABOUT: DialogBox(hInst,(LPCTSTR)IDD_ABOUT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 技术 实验 报告