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的操作又成功了。
所以向大家请教,为何会出现以上的错误。是不是数据打包失败还是什么情况?
打赏帖 | |
---|---|
分享一种检测按键状态的方法被打赏20分 | |
周末总结一下,STM32C0系列的开发经验被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下定时器配置被打赏20分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下PWM配置被打赏20分 | |
【Cortex-M】Systick Timer使用被打赏10分 | |
分享汽车防盗系统的组成与分类(一)被打赏5分 | |
VOFA+波形显示+JYD-31蓝牙发送和解析不定长数据被打赏10分 | |
【换取手持数字示波器】-STM32F4PWM控制LED灯管亮度被打赏22分 | |
【换取手持数字示波器】STM32F4驱动RPR-0521RS照度、接近一体型传感器被打赏23分 | |
宏定义和const关键字定义被打赏5分 |