| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:谁知道去雾有什么算法
只看楼主 加入收藏
jack12
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-2-20
结帖率:0
收藏
 问题点数:0 回复次数:0 
谁知道去雾有什么算法
void CMyMenusView::OnProc()
{
    CDC *pBufferDC, *pDC = GetDC();
    pBufferDC = new CDC;
    DWORD wh = 512*600*4;
    BYTE *pBits = new BYTE[wh], *pBits1 = new BYTE[wh];
//    CBitmap *pBmp = pDC->GetCurrentBitmap();
    CBitmap *pBmp = new CBitmap;
    pBmp->CreateCompatibleBitmap(pDC, 512, 600);
    pBufferDC->CreateCompatibleDC(pDC);
    pBufferDC->SelectObject(pBmp);
    pBufferDC->BitBlt(0, 0, 512, 600, pDC, 0, 0, SRCCOPY);
    pBufferDC->GetCurrentBitmap()->GetBitmapBits(wh, pBits);
//    pBmp = pDC->GetCurrentBitmap();
    DWORD i, j, ij, ij1, ij2, ij3, ij4, ij5, ij6, ij7, ij8, k, t[3];
    float s, s1 = 0.2f + 0.04f * m_pApp->m_pSettingDlg->m_Bk;
    BYTE p[3];
    ZeroMemory(t, sizeof(t));
    for (i = 0; i < 600; i ++)
        for (j = 1; j < 511; j ++)
            for (k = 0; k < 3; k ++)
                t[k] += pBits[(i*512 + j) * 4 + k];

    for (k = 0; k < 3; k ++)
        p[k] = (BYTE)(0.5f * t[k] / wh);
    float p3 = 0.5f * (p[0] + p[1] + p[2]);
    CopyMemory(pBits1, pBits, wh);
    for (i = 1; i < 599; i ++)
    {
        for (j = 1; j < 511; j ++)
        {
            ij = (i * 512 + j) * 4;
            ij1 = ((i-1) * 512 + j) * 4;
            ij2 = ((i+1) * 512 + j) * 4;
            ij3 = (i * 512 + j-1) * 4;
            ij4 = (i * 512 + j+1) * 4;
            ij5 = ((i-1) * 512 + j-1) * 4;
            ij6 = ((i+1) * 512 + j-1) * 4;
            ij7 = ((i-1) * 512 + j+1) * 4;
            ij8 = ((i+1) * 512 + j+1) * 4;
//            for (k = 0; k < 3; k ++)
//                pBits[ij+k] = (BYTE)(0.2f * pBits[ij+k] + 0.2f * pBits[ij1+k]
//                + 0.2f * pBits[ij2+k] + 0.2f * pBits[ij3+k] + 0.2f * pBits[ij4+k]);
            for (k = 0; k < 3; k ++)
            {
                s = 0.15f * pBits[ij1+k] + 0.15f * pBits[ij2+k] + 0.15f * pBits[ij3+k] + 0.15f * pBits[ij4+k]
                    + 0.1f * pBits[ij5+k] + 0.1f * pBits[ij6+k] + 0.1f * pBits[ij7+k] + 0.1f * pBits[ij8+k];
                s = powf((1.6f * pBits[ij+k] - s - p[k] * s1), 2.f) * s1 / (p3+p[k]);
                if (s < 0)
                    s = 0;
                else if (s > 255)
                    s = 255;
                pBits1[ij+k] = (BYTE)s;
            }
        }
    }
这段代码能实现去雾的效果,谁知道它用的是什么方法吗?请帮看看吧!
2011-03-02 09:58
快速回复:谁知道去雾有什么算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016431 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved