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的操作又成功了。
所以向大家请教,为何会出现以上的错误。是不是数据打包失败还是什么情况?
我要赚赏金打赏帖 |
|
|---|---|
| OK1126B-S开发板下以导航按键控制云台/机械臂姿态调整被打赏¥29元 | |
| 【树莓派5】便携热成像仪被打赏¥36元 | |
| 【树莓派5】环境监测仪被打赏¥35元 | |
| OK1126B-S开发板下多时段语音提示型电子时钟被打赏¥27元 | |
| OK1126B-S开发板下函数构建及步进电机驱动控制被打赏¥25元 | |
| 【S32K3XX】LPI2C 参数配置说明被打赏¥20元 | |
| OK1126B-S开发板的脚本编程及应用设计被打赏¥27元 | |
| 5v升压8.4v两节锂电池充电芯片,针对同步和异步的IC测试被打赏¥35元 | |
| 【S32K3XX】S32DS LPI2C 配置失败问题解决被打赏¥22元 | |
| 【S32K3XX】FLASH 的 DID 保护机制被打赏¥19元 | |
我要赚赏金
