不用这么折腾了,使用OpenCV吧

解决方案 »

  1.   

    mado[m]=p_data[yy*wide*3+xx*3];
    p_temp[j*wide+i*3]=medi;
    wide 是什么,为什么这两句不对应?
      

  2.   

    我正用的加权平均算法,部分代码:// 9点加权平均,int weight 权重值,0表示正常平均
    void HFilter::weighted9( DWORD weight )
    {
    ASSERT( m_nWidth > 3 && m_nHeight > 3 ); LPWORD p0 = m_pData;
    LPWORD p1 = m_pSource;
    LPWORD p2 = m_pSource + m_nWidth + 2;
    LPWORD p3 = m_pSource + (m_nWidth + 2)*2;
    DWORD w9 = weight + 9; // 加权后的基数
    for( int i = 0; i < m_nHeight; i++ )
    {
    for( int j = 0; j < m_nWidth; j++, p0++, p1++, p2++, p3++ )
    {
    DWORD w = p2[1] * weight; // 加权求和,权重值不能太大,太大可能越界
    for( int k = 0; k < 3; k++ )
    {
    w += p1[k];
    w += p2[k];
    w += p3[k];
    }
    // 取加权平均值
    *p0 = WORD(w / w9);
    }
    p1 += 2;
    p2 += 2;
    p3 += 2;
    }
    }源文件到http://download.csdn.net/detail/hhhh63/7373687处下载
    里还包括3x3中值滤波,效果更好,与原数据更接近。
    调用方法:
    HFilter( buf2, CAMERA_WIDTH, CAMERA_HEIGHT ).weighted9(7); // 一次平滑
    HFilter( buf3, CAMERA_WIDTH, CAMERA_HEIGHT ).weighted9(11); // 二次平滑
    HFilter( buf4, CAMERA_WIDTH, CAMERA_HEIGHT ).median3(); // 中值