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的操作又成功了。
所以向大家请教,为何会出现以上的错误。是不是数据打包失败还是什么情况?
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
