c++ 图片消融算法 求改进 300分

qq614190370 2012-11-22 04:53:06
消融算法需要实现的效果:就是每个像素的颜色溶解到周围的像素里
现在我的算法是这样,不过效率不高,原因可能是内存随机读取次数太多,考虑到cpu高速缓存的问题,在高频率处理大一点的图片的话,很不理想,
求改进,300分相送,谢谢

inline void CVisualWnd::FadeEffect(BYTE *pBits, Color cl, double Fading, int wt, int ht)
{
static int dr[5][2] = {{-1,0}, {0, 1}, {0, -1}, {1, 0}, {0, 0}};
int x=0, y=0;
int bitBytes, bitLine;
bitBytes = 32/8;
bitLine = wt*bitBytes;
int cla = cl.GetA();
int clr = cl.GetR();
int clg = cl.GetG();
int clb = cl.GetB();
double unFading = 1-Fading;
for(y=0; y!=ht; ++y)
{
for(x=0; x!=wt; ++x)
{
int r=0, g=0, b=0, a=0;
int index=0;
for(int i=0;i!=5;++i)
{
int newx=x+dr[i][0], newy=y+dr[i][1];
if(newy<0 || newy>ht-1 || newx<0 || newx>wt-1)
continue;
b += pBits[newy*bitLine + newx*bitBytes];
g += pBits[newy*bitLine + newx*bitBytes + 1];
r += pBits[newy*bitLine + newx*bitBytes + 2];
a += pBits[newy*bitLine + newx*bitBytes + 3];
++index;
}
pBits[y*bitLine + x*bitBytes] = b*Fading/index + clb*unFading ;
pBits[y*bitLine + x*bitBytes + 1]= g*Fading/index + clg*unFading ;
pBits[y*bitLine + x*bitBytes + 2]= r*Fading/index + clr*unFading ;
pBits[y*bitLine + x*bitBytes + 3]= a*Fading/index + cla*unFading ;
}
}
}

调用:FadeEffect((BYTE *)pBits, 0, 0.95, m_pImage->GetWidth(),m_pImage->GetHeight());
...全文
200 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
潇潇雨云 2012-12-12
  • 打赏
  • 举报
回复
建议楼主用标准的opencv函数,很强大!!
blowlow 2012-12-10
  • 打赏
  • 举报
回复
这个就是低通滤波啊,弄个滤波算子,调用标准的opencv滤波函数就可以啦。
傻X 2012-12-07
  • 打赏
  • 举报
回复
这算法主要是N^3,让人有点受不了。 而且,先消融的点貌似会影响后消融的点。
3m2u 2012-12-07
  • 打赏
  • 举报
回复
你好像有好多计算 会被重复算. 比如 newy*bitLine + newx*bitBytes 就要算好多次
3m2u 2012-12-07
  • 打赏
  • 举报
回复
怎么不来点注释 循环里面是干嘛呢? 一堆乘法,还是符点数,应该快不了
qq614190370 2012-11-22
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390291142 http://bbs.csdn.net/topics/390291138

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧