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的操作又成功了。
所以向大家请教,为何会出现以上的错误。是不是数据打包失败还是什么情况?
有奖活动 | |
---|---|
“我踩过的那些坑”主题活动——第002期 | |
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |