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分 | |
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 |