2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩13頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  序號: </p><p>  學號: ******** </p><p>  課 程 設 計</p><p>  設計課程名稱: C語言課程設計 </p><p>  題 目:

2、 數字圖像處理—幾何變換1 </p><p>  學 生 姓 名: *** </p><p>  學 院(系): ******* 專 業 班 級: ***** </p><p>  指 導 教 師: ***

3、 專業技術職務: ***** </p><p>  設計時間: **** 年 *月 ** 日 **** 年 * 月 **</p><p><b>  目錄</b></p><p>  1、系統的意義以及主要功能2</p><p>  1.1系統的意義2</p><p>  

4、1.2圖像的功能2</p><p>  2、整個系統的功能結構圖以及調用關系2</p><p>  3、各個功能實現流程圖2</p><p>  3.1彩色圖像變成灰度圖像2</p><p>  3.2幾何變換之--旋轉3</p><p>  3.3幾何變換之--鏡像3</p><p&g

5、t;  4、調試運行,程序的界面以及輸入數據,以及輸出結果4</p><p><b>  4.1原圖4</b></p><p>  4.2彩色圖像變為灰度圖像4</p><p>  4.3灰度圖像水平鏡像4</p><p>  4.4灰度圖像垂直鏡像5</p><p>  4.5彩色圖像

6、水平鏡像5</p><p>  4.6彩色圖像垂直鏡像5</p><p>  4.7灰度圖像旋轉(48)6</p><p>  4.8彩色圖像旋轉(90)6</p><p><b>  5、使用說明6</b></p><p>  6、C語言源程序代碼7</p><p

7、><b>  7、心得體會12</b></p><p><b>  8、實習日志13</b></p><p><b>  9、參考文獻13</b></p><p><b>  ~ 1 ~</b></p><p>  1、系統的意義以及主要功能&

8、lt;/p><p><b>  1.1系統的意義</b></p><p>  目前圖像處理的應用越來越廣泛,已經滲透到工業、航空航天、軍事等各領域,在國民經濟中發揮越來越大的作用</p><p><b>  1.2圖像的功能</b></p><p>  讀入一幅彩色的數字圖像,完成一系列的幾何運算,并輸

9、出每個運算的效果圖</p><p>  1.將彩色圖像變為灰度圖像</p><p>  2.將灰度圖像旋轉任意角度;并對彩色圖像進行相應旋轉</p><p>  3.將灰度圖像和彩色圖像進行水平鏡像和垂直鏡像</p><p>  2、整個系統的功能結構圖以及調用關系</p><p>  3、各個功能實現流程圖</

10、p><p>  3.1彩色圖像變成灰度圖像</p><p>  3.2幾何變換之--旋轉 3.3幾何變換之--鏡像</p><p><b>  ~ 3 ~</b></p><p>  4、調試運行,程序的界面以及輸入數據,以及輸出結果</p><p>&

11、lt;b>  4.1原圖</b></p><p>  4.2彩色圖像變為灰度圖像</p><p>  4.3灰度圖像水平鏡像</p><p>  4.4灰度圖像垂直鏡像</p><p>  4.5彩色圖像水平鏡像</p><p>  4.6彩色圖像垂直鏡像</p><p>  

12、4.7灰度圖像旋轉(48)</p><p>  4.8彩色圖像旋轉(90)</p><p><b>  5、使用說明</b></p><p>  編譯鏈接后出現對話框和原始圖片,按任意鍵即可在對話框中輸入,根據對話框提示輸入數字完成對應功能,出現功能圖像按任意鍵摧毀窗口,即可繼續輸入完成對應功能。輸入0結束變換,按任意鍵退出對話框。</p

13、><p><b>  ~ 6 ~</b></p><p>  6、C語言源程序代碼</p><p>  #include "mydll.h"</p><p>  #include <stdio.h></p><p>  #include <stdlib.h>

14、</p><p>  #include <string.h></p><p>  #include <math.h></p><p>  #define PI 3.14159265</p><p>  void main()</p><p><b>  {</b></

15、p><p>  double maxa(double a,double b);//最大值</p><p>  void hd(int wide,int height,unsigned char*pdata,unsigned char*gray); //灰度</p><p>  void spjx(int wide,int height,unsigned char*pd

16、ata,int numcolors); //水平鏡像</p><p>  void czjx(int wide,int height,unsigned char*pdata,int numcolors); //垂直鏡像</p><p>  void hdxz(int wide,int height,struct image*p1,struct image *p2,int k

17、); //旋轉</p><p>  struct image img1,img2,*p2=&img2,*p1=&img1;</p><p>  unsigned char *pdata,*gray;</p><p>  int i,k,n=3,m;</p><p>  int wide,height;</p>&

18、lt;p>  imgfiletomat("G:\\ 1.jpg", &img1); //顯示原始圖像</p><p>  createwindow("原圖");</p><p>  imgshow("原圖",&img1);</p><p>  wait(0); //等待按鍵</p

19、><p>  destroywindow("原圖");</p><p>  height=img1.height;//像素高度</p><p>  wide=img1.width; //像素寬度</p><p>  for(i=0;(n!=0);i++)</p><p><b>  {

20、</b></p><p>  printf("\n\n\n");</p><p>  printf("\t\t----------------------------------------------------------------------\n");</p><p>  printf("\t\t

21、| 圖像幾何變換 |\n"); </p><p>  printf("\t\t----------------------------------------------------------------------\n"); </p><p>  printf(&

22、quot;\t\t| [1]----灰 度 |\n");</p><p>  printf("\t\t| [2]----水平鏡像 |\n");</p><p>  printf("\t\t| [3

23、]----垂直鏡像 |\n");</p><p>  printf("\t\t| [4]----旋 轉 |\n");</p><p>  printf("\t\t| [0]----退出系統

24、 |\n");</p><p>  printf("\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·*·**·*

25、83;*·*·*|\n");</p><p>  printf("\t\t----------------------------------------------------------------------\n");</p><p>  printf("請輸入:");</p><p>  

26、scanf("%d",&n);</p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case 0: break; ~ 7 ~</p

27、><p>  case 1:imgfiletomat("G:\\ 1.jpg", &img1);pdata=img1.ptr;</p><p>  if(img1.numcolors==3)</p><p><b>  {</b></p><p>  img1.numcolors=1;img1.

28、ptr=gray=(unsignedchar*)malloc(wide*height);</p><p>  hd(wide,height,pdata,gray);</p><p>  createwindow("灰度圖");</p><p>  imgshow("灰度圖",&img1);</p><

29、;p>  wait(0); //等待按鍵</p><p>  mattoimgfile("G:\\ c1.jpg",&img1);</p><p>  free(gray);</p><p>  gray=NULL;</p><p>  destroywindow("灰度圖");</

30、p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\t\t+***************************************|\n");&l

31、t;/p><p>  printf(" 請換彩色圖 \n");</p><p>  printf("\t\t+**************************************|\n");</p><p><b>  }</b></p

32、><p><b>  break;</b></p><p>  case 2:printf("\t\t+***************************************|\n");</p><p>  printf("\t\t [1]----彩色水平鏡像 \n&q

33、uot;);</p><p>  printf("\t\t [2]----灰度水平鏡像 \n");</p><p>  printf("\t\t+***************************************|\n");</p><p>  printf("請輸

34、入:");</p><p>  scanf("%d",&m);</p><p><b>  if(m==1)</b></p><p>  {imgfiletomat("G:\\ 1.jpg", &img1);pdata=img1.ptr;}</p><p>

35、;<b>  else</b></p><p>  {imgfiletomat("G:\\ c1.jpg", &img1);pdata=img1.ptr;}</p><p>  spjx(wide,height,pdata,img1.numcolors);</p><p>  createwindow("水

36、平鏡像圖");</p><p>  imgshow("水平鏡像圖",&img1);</p><p>  wait(0); //等待按鍵</p><p>  destroywindow("水平鏡像圖");</p><p><b>  break;</b></p

37、><p>  case 3:printf("\t\t+***************************************|\n");</p><p>  printf("\t\t [1]----彩色垂直鏡像 \n");</p><p>  printf("\t\t

38、 [2]----灰度垂直鏡像 \n");</p><p>  printf("\t\t+***************************************|\n");</p><p>  printf("請輸入:");</p><p>  scanf("%d&

39、quot;,&m);</p><p>  if(m==1) ~ 8 ~</p><p>  {imgfiletomat("G:\\ 1.jpg", &img1);pdata=img1.ptr;}</p><p><b>  else

40、</b></p><p>  {imgfiletomat("G:\\ c1.jpg", &img1);pdata=img1.ptr;}</p><p>  czjx(wide,height,pdata,img1.numcolors);</p><p>  createwindow("垂直鏡像圖");<

41、/p><p>  imgshow("垂直鏡像圖",&img1);</p><p>  wait(0); //等待按鍵</p><p>  destroywindow("垂直鏡像圖");</p><p><b>  break;</b></p><p> 

42、 case 4:printf("\t\t+***************************************|\n");</p><p>  printf("\t\t [1]----彩色旋轉鏡像 \n");</p><p>  printf("\t\t [2]----

43、灰度旋轉鏡像 \n");</p><p>  printf("\t\t+***************************************|\n");</p><p>  printf("請輸入:");</p><p>  scanf("%d",&m);&l

44、t;/p><p><b>  if(m==1)</b></p><p>  {imgfiletomat("G:\\ 1.jpg", &img1);pdata=img1.ptr;}</p><p><b>  else</b></p><p>  {imgfiletomat(&

45、quot;G:\\ c1.jpg", &img1);pdata=img1.ptr;}</p><p>  printf("輸入旋轉角度:\t");</p><p>  scanf("%d",&k);</p><p>  hdxz(wide,height,p1,p2,k);</p><

46、;p>  createwindow("旋轉");</p><p>  imgshow("旋轉",&img2);</p><p>  wait(0); //等待按鍵</p><p>  destroywindow("旋轉");</p><p><b>  bre

47、ak;</b></p><p><b>  default:</b></p><p>  printf("\t\t+***************************************|\n");</p><p>  printf(" 輸入錯誤

48、 \n");</p><p>  printf("\t\t+***************************************|\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>

49、  destroyallwindows();</p><p><b>  }</b></p><p>  double maxa(double a,double b)</p><p><b>  {</b></p><p>  return (a>b?a:b);</p><

50、;p><b>  }</b></p><p><b>  //灰度</b></p><p>  void hd(int wide,int height,unsigned char*pdata,unsigned char*gray)</p><p><b>  {</b></p>&

51、lt;p>  int i,j,k=0;</p><p>  for(i=0;i<height;i++)//進行遍歷元素 ~ 9 ~</p><p>  for(j=0;j<wide;j++)</p><p>  {//將原圖RGB的值根據公式賦給新開辟的空間</p&

52、gt;<p>  *(gray++)=(*(pdata+k)*11+*(pdata+k+1)*59+*(pdata+k+2)*30)/100;</p><p><b>  k+=3;</b></p><p><b>  }</b></p><p><b>  }</b></p>

53、;<p><b>  //水平鏡像</b></p><p>  void spjx(int wide,int height,unsigned char*pdata,int numcolors)</p><p><b>  {</b></p><p>  unsigned char*temp,*ogray,*n

54、gray,*p=pdata;</p><p>  int i,j,k,n=numcolors,m;</p><p>  temp=(unsigned char*)malloc(wide*height*numcolors);//開辟一個空間用以存放數據</p><p>  for(i=0;i<height;i++)//對元素進行遍歷</p>&l

55、t;p><b>  {</b></p><p>  k=wide*n-1;</p><p>  for(j=0;j<wide;j++)</p><p><b>  {</b></p><p>  for(m=numcolors;m>0;m--)//灰度與彩色的轉換</p

56、><p><b>  { </b></p><p>  ogray=pdata++;//遍歷原圖每一個值</p><p>  ngray=temp+wide*i+k-j*numcolors-(m-1);//對應新開辟空間的地址</p><p>  *ngray=*ogray;//把數據存放在新開辟的空間里&l

57、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  if(numcolors==3)</p><p><b>  n+=2;</b></p><p><b>  }</b><

58、;/p><p>  memcpy(p,temp,wide*height*numcolors);//數據拷貝</p><p>  free(temp);//釋放開辟的空間</p><p>  temp=NULL;//防止野指針</p><p><b>  }</b></p><p><b>

59、;  //垂直鏡像</b></p><p>  void czjx(int wide,int height,unsigned char*pdata,int numcolors)</p><p><b>  {</b></p><p>  unsigned char*temp,*lpdst,*lpsrc;</p><

60、;p><b>  int i,j;</b></p><p>  temp=(unsigned char*)malloc(wide*height*numcolors);//開辟一個空間用以存放數據</p><p>  for(i=0;i<wide*numcolors;i++)//遍歷數據并把數據存放在新開辟的空間里</p><p>

61、  for(j=0;j<height;j++)</p><p><b>  {</b></p><p>  lpsrc=pdata+wide*numcolors*j+i;//數據地址</p><p>  lpdst=temp+wide*numcolors*(height-1-j)+i;//相應新開辟的空間的地址</p>

62、;<p>  *lpdst=*lpsrc;//把數據存放在新開辟的空間里</p><p>  } ~ 10 ~</p><p>  memcpy(pdata,temp,wide*height*numcolors);//數據拷貝</p><

63、;p>  free(temp);//釋放開辟的空間</p><p>  temp=NULL;//防止野指針</p><p><b>  }</b></p><p><b>  //灰度圖旋轉</b></p><p>  void hdxz(int wide,int height,struct

64、image*p1,struct image *p2,int k)</p><p><b>  {</b></p><p>  unsigned char*temp,*pdata;</p><p>  double offx1,offy1,offx2,offy2;//原圖四個角的坐標</p><p>  double o

65、ffx3,offy3,offx4,offy4;</p><p>  double nffx1,nffy1,nffx2,nffy2;//新圖四個角的坐標</p><p>  double nffx3,nffy3,nffx4,nffy4;</p><p>  double cosa,sina,a,b;</p><p>  int x0,y0,x

66、1,y1,nwide,nheight,n=0,m=0;</p><p>  pdata=p1->ptr;</p><p>  cosa=cos(PI*k/180.0); //角度變弧度</p><p>  sina=sin(PI*k/180.0);</p><p>  offx1 = -0.5 * wide;//以中心為原點計算原圖四

67、個角的坐標</p><p>  offy1 = 0.5 * height;</p><p>  offx2 = 0.5 * wide;</p><p>  offy2 = 0.5 * height;</p><p>  offx3 = -0.5 * wide;</p><p>  offy3 = -0.5 * heig

68、ht;</p><p>  offx4 = 0.5 * wide;</p><p>  offy4 = -0.5 * height;</p><p>  nffx1 = cosa * offx1 + sina * offy1;//旋轉后新圖四個角的坐標</p><p>  nffy1 = -sina * offx1 + cosa * offy

69、1;</p><p>  nffx2 = cosa * offx2 + sina * offy2;</p><p>  nffy2 = -sina * offx2 + cosa * offy2;</p><p>  nffx3 = cosa * offx3 + sina * offy3;</p><p>  nffy3 = -sina * o

70、ffx3 + cosa * offy3;</p><p>  nffx4 = cosa * offx4 + sina * offy4;</p><p>  nffy4 = -sina * offx4 + cosa * offy4;</p><p>  nwide=(int)(maxa(fabs(nffx4-nffx1),fabs(nffx3-nffx2))+0.5)

71、;//新圖的寬和高</p><p>  nheight=(int)(maxa(fabs(nffy4-nffy1),fabs(nffy3-nffy2))+0.5);</p><p>  p2->width=nwide;//給img2賦值</p><p>  p2->height=nheight;//給img2賦值</p><p> 

72、 p2->numcolors=p1->numcolors;//給img2賦值</p><p>  //開辟一個空間用以存放數據</p><p>  p2->ptr=temp=(unsigned char *)malloc(nwide*nheight*(p2->numcolors));</p><p>  a = - 0.5 * nwide

73、 * cosa - 0.5 * nheight * sina + 0.5 * wide;//旋轉常值</p><p>  b = 0.5 * nwide * sina - 0.5 * nheight * cosa + 0.5 * height;//旋轉常值 </p><p>  if(p2->numcolors==3)//判斷灰度圖,彩色圖</p><p&g

74、t;  { ~ 11 ~</p><p>  for(y1=0;y1<nheight;y1++)//進行彩色圖元素遍歷</p><p><b>  {</b></p><p>  for(x1=0;x1<nwide

75、;x1++) </p><p><b>  { </b></p><p>  x0=(int)(x1*cosa+y1*sina+a);//算出新坐標對應的原圖坐標</p><p>  y0=(int)(-x1*sina+y1*cosa+b);</p><p>  //判斷是否超過原圖,超過賦255

76、</p><p>  if((x0<wide)&&(x0>=0)&&(y0<height)&&(y0>=0))</p><p>  {//將原圖RGB值賦予新開辟空間對應的位置</p><p>  *(temp++)=*(pdata+y0*wide*p2->numcolors+

77、m); </p><p>  *(temp++)=*(pdata+y0*wide*p2->numcolors+m+1);</p><p>  *(temp++)=*(pdata+y0*wide*p2->numcolors+m+2);</p><p><b>  }</b></p><p><b&

78、gt;  else</b></p><p><b>  {</b></p><p>  *(temp++)=255;//將沒有對應點的值賦255,使其變白色</p><p>  *(temp++)=255;</p><p>  *(temp++)=255;</p><p><b&

79、gt;  } </b></p><p><b>  }</b></p><p><b>  m+=3;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>&l

80、t;b>  else</b></p><p>  { //進行灰度圖元素遍歷</p><p>  for(y1=0;y1<nheight;y1++)</p><p>  for(x1=0;x1<nwide;x1++)</p><p><b>  { </b></p>

81、<p>  x0=(int)(x1*cosa+y1*sina+a);//算出新坐標對應的原圖坐標</p><p>  y0=(int)(-x1*sina+y1*cosa+b);</p><p>  //判斷是否超過原圖,超過賦255 </p><p>  if((x0<wide)&&(x0>=0)&&(

82、y0<height)&&(y0>=0)) </p><p>  *(temp++)=*(pdata+y0*wide+x0);//將原圖的值賦予新開辟空間對應的位置</p><p><b>  else</b></p><p>  *(temp++)=255;//將沒有對應點的值賦255,使其變白色</

83、p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  7、心得體會</b></p><p>  剛開始并不了解圖像如何用vc來進行幾何變換,后來經

84、過初步認識,了解到各門</p><p><b>  ~ 12 ~</b></p><p>  學科的聯系,c語言中用到了很多算法和數學有著緊密的聯系,感受到數組與指針的強</p><p>  大,編程需要注意細節,不然犯錯了在去找問題所在很難找出問題錯在哪里?;A知識要熟練掌握,多上機,發現問題解決問題,才能在今后編程中少犯錯誤。</p&

85、gt;<p><b>  8、實習日志</b></p><p><b>  6月17日</b></p><p>  安排:學習圖像基本知識,完成彩色圖像變灰度圖像</p><p>  進度:完成了圖像灰度,但并沒有真正灰度(numcolors=3)</p><p><b> 

86、 6月19日</b></p><p>  安排:解決上次問題,完成水平鏡像(彩色和灰度圖像)</p><p>  進度:解決了上次問題,完成灰度圖像的水平鏡像,彩色圖像水平鏡像出現問題</p><p>  遇到的問題:彩色圖像水平鏡像后顏色改變(RGB值賦錯)</p><p>  解決辦法:調整指針指向(使RGB值賦對)</

87、p><p><b>  6月24日</b></p><p>  安排:解決上次問題,完成垂直鏡像(彩色和灰度圖像)</p><p><b>  進度:完成良好</b></p><p><b>  6月26日</b></p><p>  安排:完成旋轉(彩色和

88、灰度圖像)</p><p>  進度:只完成特殊值得旋轉</p><p>  遇到問題:地址訪問錯誤</p><p>  解決辦法:調試逐句查看,查看哪里地址訪問錯誤</p><p><b>  6月27日</b></p><p>  安排:完成界面設計,彩色圖像旋轉</p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論