大学生电子设计竞赛
直播中

许多

6年用户 19经验值
私信 关注
[问答]

请问一个迭代法图形二值化的程序代码把宽改成240之后整个屏幕不显示是什么原因?

  1. #define PIXEL_W      320
  2. #define PIXEL_H    180
  3. #define PIXEL_BREAK  100

  4. //»Ò¶ÈÖ±·½Í¼ÊýÖµ£¬ÓÃÀ´Åжϰ´Í¼ÏñÖÊÁ¿
  5. u32 gray_test_value[26];   //ÏñËصãÊýÊý¾Ý
  6. u8 gray_test_send[28];     //·¢Ë͸øÉÏλ»úµÄÊý¾Ý

  7. //ãÐÖµ·Ö¸î»Ò¶Èͼ
  8. u8 gray_itera_threshold[256];
  9. u16 threshold_h[256];
  10. #define GRAY_BREAK_RANGE     1    //ãÐÖµÔÊÐí²ÎÊý

  11. static u8 pixel[PIXEL_H][PIXEL_W];

  12. /*       320
  13. * -------------------
  14. *|                   |
  15. *|                   |
  16. *|                   |  240
  17. *|                   |
  18. *|                   |
  19. * -------------------
  20. */
  21. void ImagDisp_T(void)
  22. {
  23.         uint16_t i=0, j=0;
  24.         uint16_t Camera_Data;
  25.         uint16_t R,G,B;uint32_t mux;
  26.   //mux_later;
  27. //        float data = 0.0;

  28. //        LCD_SetCursor(0,0); È·¶¨Òº¾§É¨Ãè·½Ïò
  29. //        LCD_WriteIndex(0x22);ÇåÆÁ×¼±¸Ð´ÈëÊý¾Ý
  30.   ILI9341_GramScan ( 3 );


  31.         for(i = 0; i
  32.         {
  33.                 for(j = 0; j
  34.                 {
  35.                  //READ_FIFO_PIXEL(Camera_Data);                /* ´ÓFIFO¶Á³öÒ»¸örgb565ÏñËص½Camera_Data±äÁ¿ */
  36.                  //ת»»³É»Ò¶Èͼ        
  37.       READ_FIFO_PIXEL(Camera_Data);                /* ´ÓFIFO¶Á³öÒ»¸örgb565ÏñËص½Camera_Data±äÁ¿ */      
  38.                         R = (uint16_t)GETR_FROM_RGB16(Camera_Data);
  39.                         G = (uint16_t)GETG_FROM_RGB16(Camera_Data);
  40.                         B = (uint16_t)GETB_FROM_RGB16(Camera_Data);
  41.                         mux = (R*30+G*59+B*11)/100;
  42. ////                 mux = G;
  43. //      
  44.                         pixel[i][j] = mux;
  45.                         
  46.     //pixel[i][j] = GETGRAY_FROM_RGB16(R,G,B);
  47.                         
  48.   //    mux = pixel[i][j];
  49. //     Camera_Data =  GRAY_TO_RGB(mux);  
  50. //     ILI9341_Write_Data(Camera_Data);
  51.       
  52.                 }

  53.         }
  54. }
  55. /****************************************************
  56. * º¯ÊýÃû£ºItera_Threshold
  57. * ¹¦  ÄÜ£ºµü´úãÐÖµ·¨£¬Äܹ»ÕÒµ½»Ò¶ÈͼµÄ×î¼Ñ¶þÖµ»¯µã
  58. ****************************************************/
  59. void Itera_Threshold(void)
  60. {
  61.   u16 i=0,j=0,k=0,cnt=0,mux=0,Camera_Data=0;
  62.         u8 newthreshold=0;
  63.         u16 Pmax=0,Pmin=0;
  64.         u32 sum_h1=0,sum_h2=0;
  65.         
  66.         
  67.         //Êý¾ÝÇå¿Õ
  68.         for( i=0; i<256; i++ )
  69.         {
  70.           gray_test_value[i] = 0;
  71.         }
  72.         
  73.         for( i=0; i
  74.         {
  75.           for( j=0; j
  76.                 {
  77.                   mux = pixel[i][j];//»ñÈ¡»Ò¶ÈͼµÄÊý¾Ý               
  78.                         //ÏñËصãÊý×ÔÔö     
  79.                         gray_itera_threshold[mux]++;        
  80.                 }
  81.         }
  82.         
  83.         Pmin = gray_itera_threshold[0];
  84.         Pmax = gray_itera_threshold[0];
  85.         for( cnt=0; cnt<256; cnt++ )
  86.         {
  87.       if( Pmin>gray_itera_threshold[cnt] )
  88.       {
  89.         Pmin = gray_itera_threshold[cnt];
  90.       }
  91.       if( Pmax
  92.       {
  93.         Pmax = gray_itera_threshold[cnt];
  94.       }
  95.         }
  96.         
  97.         printf("the Pmax is %dr n",Pmax);
  98.         printf("the Pmin is %d rn",Pmin);
  99.         
  100.         //³õʼãÐÖµ
  101.         threshold_h[0] = ( Pmax + Pmin ) / 2;
  102.         
  103.         //Ñ°ÕÒ×î¼ÑãÐÖµ
  104.         for( k=0; k<256; k++ )
  105.         {
  106.                 //·Ö¸îÇ°¾°ºÍ±³¾°
  107.                 for( cnt=0; cnt
  108.                 {
  109.                         sum_h1 += gray_itera_threshold[cnt];
  110.                 }
  111.                 for( cnt=threshold_h[k]; cnt<256; cnt++ )
  112.                 {
  113.                         sum_h2 += gray_itera_threshold[cnt];
  114.                 }
  115.                 sum_h1 /= threshold_h[k];
  116.                 sum_h2 /= (256-threshold_h[k]);
  117.                
  118.                 //¼ÆËã³öеÄãÐÖµ
  119.                 threshold_h[k+1] = ( sum_h1 + sum_h2 ) / 2;
  120.                
  121.                 if( fabs(threshold_h[k]-threshold_h[k+1]) <= GRAY_BREAK_RANGE )
  122.     {
  123.                         newthreshold = threshold_h[k+1];
  124.                   break;
  125.                 }
  126.                
  127.                 sum_h1 = 0;
  128.                 sum_h2 = 0;
  129.         }

  130.         printf("the newthreshold is %drn",newthreshold);
  131.         
  132. //        //ÔÚÒº¾§ÆÁÉÏÃæдÈëͼÏñ·Ö¸îºóµÄͼÏñ
  133. //  LCD_SetCursor(0,0);
  134. //        LCD_WriteIndex(0x22);                                        //×¼±¸Ð´ÈëÊý¾Ý
  135.         //¸ù¾Ý×î¼ÑãÐÖµ½«Í¼Ïñ¶þÖµ»¯
  136.   ILI9341_GramScan ( 3 );
  137. //  ILI9341_Clear ( 0, 0, 240, 320, macWHITE);
  138.         for( i=0; i
  139.         {
  140.           for( j=0; j
  141.                 {
  142.                   mux = pixel[i][j];                     //»ñÈ¡»Ò¶ÈͼµÄÊý¾Ý
  143.                   //ͼÏñ¶þÖµ»¯
  144.                         if( mux > newthreshold )
  145.       {
  146.                           mux = 255;
  147.                         }
  148.                         else
  149.        {
  150.                           mux = 0;
  151.                         }
  152.                         
  153.                         Camera_Data =  GRAY_TO_RGB(mux);
  154.       ILI9341_Write_Data(Camera_Data);
  155.                         
  156.                 }
  157.         }

  158. }

这个程序代码在板子上只能显示一部分,因为设定的长宽只有180*320

但是把宽改成240之后整个屏幕不显示了,我试了试这个宽度只能到189就不行了,是不是数据类型定义的问题啊~各位大佬帮帮小弟吧!!万分感谢

更多回帖

发帖
×
20
完善资料,
赚取积分