OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2682|回复: 7

能不能帮我看看,为什么图像显示不出来。。

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-15
在线时间
11 小时
发表于 2018-3-17 16:22:50 | 显示全部楼层 |阅读模式
3金钱
按照原子哥的例程改的,没贴出来的部分,除了sccb该成yuv,其他地方都没动。。
                for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
                {
                        for(j=0;j<OV7725_WINDOW_WIDTH;j++)
                        {
                                OV7725_RCK_L;
                                color=GPIOC->IDR&0XFF;        //&#182;áêy&#190;Y
                                OV7725_RCK_H;
                                color<<=8;  
                                OV7725_RCK_L;
                                color|=GPIOC->IDR&0XFF;        //&#182;áêy&#190;Y
                                OV7725_RCK_H;
                                gray=(color>>8);//提取Y分量
                                if((i%2==0)&&(j%2==0))
                                {temp[i/2][j/2]=gray;} //提取为120*160图像数组,ram不够没办法
                        }
                }
               
        //otus二值化

    for(i=0;i<120;i++)
    {
       for(j=0;j<160;j++)
       {
          if(temp[i][j]>max) max=temp[i][j];
          if(temp[i][j]<min) min=temp[i][j];
       }
    }
    threshold=(max+min)/2;
    max=0;
    min=0;
    for(i=0;i<120;i++)
    {
       for(j=0;j<160;j++)
       {
          if(temp[i][j]>threshold) max=max+temp[i][j];
          if(temp[i][j]<threshold) min=min+temp[i][j];
       }
    }
    threshold=(max+min)/4800;

    for(i=0;i<120;i++)
    {
       for(j=0;j<160;j++)
       {
          if(temp[i][j]>=threshold)
          {
             mux[i][j]=0xfe;
          }
          else
          {
             mux[i][j]=0x00;
          }
       }
    }
               
        //整场去噪点
          count=0;         // ????????
    for(i=1;i<120;i++)
    {
       for(j=1;j<160;j++)
       {
           if(mux[i][j]==0xfe)   //?????????,????????????,???????
              {  if((mux[i-1][j]==0xfe || mux[i+1][j]==0xfe) && (mux[i][j-1]==0xfe || mux[i][j+1]==0xfe))
                  {
                       mux[i][j]=0xfe;
                       count++;
                  }
                 else
                    mux[i][j]=0x00;
              }
            else  if(mux[i][j]==0x00)  //?????????,????????????,???????
                  {
                     if((mux[i-1][j]==0x00 || mux[i+1][j]==0x00)&&(mux[i][j-1]==0x00 || mux[i][j+1]==0x00))
                     {
                          mux[i][j]=0x00;
                     }
                     else
                     {
                          mux[i][j]=0xfe;
                          count++;
                     }
                  }

         }
    }
       
        //显示
        for(i=1;i<240;i++)
  {
      for(j=1;j<320;j++)
      {
                                bw=mux[i/2][j/2];
                                rgb=(((bw>>(3))<<11)|((bw>>(2))<<5)|((bw>>(3))<<0));//转为rgb565格式
                                LCD->LCD_RAM=rgb;
                        }
        }
       
因为我看到有帖子说最后要转为rgb565才能显示,一开始没加二值化算法可以,为什么现在图像一片黑,难道算法有问题?


最佳答案

查看完整内容[请看2#楼]

已经解决了,数组必须用全局变量。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-15
在线时间
11 小时
 楼主| 发表于 2018-3-17 16:22:51 | 显示全部楼层
已经解决了,数组必须用全局变量。。
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-15
在线时间
11 小时
 楼主| 发表于 2018-3-17 18:32:24 | 显示全部楼层
没人吗,难道没有大神做这方面的?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-18 00:53:26 | 显示全部楼层
一片漆黑肯定不对。 你用rgb565正常不? 先rgb正常,再改yuv
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-15
在线时间
11 小时
 楼主| 发表于 2018-3-18 18:44:13 | 显示全部楼层
rgb肯定正常,一开始没改就验证过了,我怀疑是不是哪里写错了?
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2018-3-15
在线时间
11 小时
 楼主| 发表于 2018-3-19 10:58:16 | 显示全部楼层
现在不用二值化处理,就把图像提取出来保存为数组再一个一个像素点显示也不成功。。
        for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
                {
                        for(j=0;j<OV7725_WINDOW_WIDTH;j++)
                        {
                                OV7725_RCK_L;
                                color=GPIOC->IDR&0XFF;        
                                OV7725_RCK_H;
                                color<<=8;  
                                OV7725_RCK_L;
                                color|=GPIOC->IDR&0XFF;        
                                OV7725_RCK_H;
                                gray=(color>>8);
                                if((i%2==0)&&(j%2==0))
                                {temp[i/2][j/2]=gray;}
                        }
                }
        
        //图像显示
        for(i=1;i<240;i++)
  {
      for(j=1;j<320;j++)
      {                                                                                                                                                                                                                                                                                                                                                                                                         
                                bw=temp[i/2][j/2];
                                rgb=(((bw>>(3))<<11)|((bw>>(2))<<5)|((bw>>(3))<<0));
                                LCD->LCD_RAM=rgb;
                        }
        }
回复

使用道具 举报

22

主题

117

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
798
金钱
798
注册时间
2015-10-24
在线时间
160 小时
发表于 2018-3-19 16:32:20 | 显示全部楼层
帮顶
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-3-20 01:41:57 | 显示全部楼层
仿真找问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 08:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表