这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 求助DSP打包技术

共6条 1/1 1 跳转至

求助DSP打包技术

菜鸟
2010-12-07 11:47:27     打赏
for (i=2;i<=Height-2;i++)
 {
  for (j=2; j<Width-2; j=j+4)
  {
   p=_mem4(&ImageGray->pixels[i*Width +j-1]);
   q=_mem4(&ImageGray->pixels[i*Width +j+1]);
   
   r=_subabs4(p,q);      
   _mem4(&ImageEdge->pixels[i*Width +j])=r;
   
   x1=(r & 0xFF000000)>>24;
   x2=(r & 0x00FF0000)>>16;
   x3=(r & 0x0000FF00)>>8;
   x4=(r & 0x000000FF);
   
   hist[x1]=hist[x1]+1;
   hist[x2]=hist[x2]+1;
   hist[x3]=hist[x3]+1;
   hist[x4]=hist[x4]+1;
   pixel_sum=pixel_sum+4;   
   
  } 
 }

 //为了去除其他强光照的干扰,特做以下处理
 //在图像的上1/8高度中,左右缩进72个像素不处理,设置为0;
 //在图像的上1/8高度到1/4高度中,左右缩进60个像素不处理,设置为0;
 //在图像的上1/4高度到1/2高度中,左右缩进40个像素不处理,设置为0;
 //在图像的上1/2高度到1高度中,左右缩进20个像素不处理,设置为0;
 
 for (i=2;i<Height/8;i++)
 {
  for (j=0;j<72;j+=4)
  {
      p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-72;j<Width;j+=4)
  {
      p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=0x00000000;
  }
 }
 
 for (i=Height/8;i<Height/4;i++)
 {
  for (j=0;j<60;j+=4)
  {
      p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-60;j<Width;j+=4)
  {
      p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
 }
 
 for (i=Height/4;i<Height/2;i++)
 {
  for (j=0;j<40;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-40;j<Width;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  } 
 }

 for (i=Height/2;i<Height-1;i++)
 {
  for (j=0;j<20;j+=4)
  {
      p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-20;j<Width;j+=4)
  {
      p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
 }
大家好,我先说明下以上代码的意思,这是一个图像处理的代码,第一部分是对图像进行水平差分处理,第二部分是对经过水平差分处理得到的图像边缘部分灰度值置为0 ;
由于像素值类型为unsigned char型,所以在此用_mem4连续读取4个字节。
目前的情况是:
for (i=Height/4;i<Height/2;i++)
 {
  for (j=0;j<40;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-40;j<Width;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  } 
 }
这部分代码中,对像素值进行置0 ,但是很大一部分操作不成功,置不了0 ;但我把此段代码分成
for (i=Height/4;i<Height*3/8;i++)
 {
  for (j=0;j<40;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-40;j<Width;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  } 
 }

for (i=Height*3/8;i<Height/2;i++)
 {
  for (j=0;j<40;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  }
  for (j=Width-40;j<Width;j+=4)
  {
   p=(0x00000000)&p;
   _mem4(&ImageEdge->pixels[i*Width+j])=p;
  } 
 }
的时候,置0的操作又成功了。
所以向大家请教,为何会出现以上的错误。是不是数据打包失败还是什么情况?



关键词: 求助     打包     技术     ImageEdge-pixels    

院士
2010-12-07 13:24:47     打赏
2楼
JPP是不是比较懂的呢

菜鸟
2010-12-08 10:21:09     打赏
3楼
不是很懂

菜鸟
2010-12-08 15:42:42     打赏
4楼
问题已经解决,这个主要是和DSP资源有关,所以会造成这个错误

高工
2010-12-08 19:07:15     打赏
5楼
不是资源本身的问题,是你CMD文件,分配的时候数据区开辟的不够大!

菜鸟
2010-12-09 13:05:13     打赏
6楼
恩,是JPP说的那样。呵呵,谢谢了。

共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]