C++实现降低一幅图像的空间分辨率

      本人在学习图像处理时使用vs2017中MFC框架编写了相关的图像处理程序,使用的编程语言是c++,而且没有使用Openvc。关于MFC框架的使用请在网上搜索相关视频或者博客学习,下面给出MFC框架,基本的框架已经搭建好,只需要自己添加程序。

附上框架百度云盘资源:

链接:https://pan.baidu.com/s/1naem-uRNQLVhfF-FwY4kmA
注意:使用VS2017打开的时候平台工具集等提示均选择 “无升级”,当然了,如果直接选择默认的选项然后升级也可以,如果出现平台工具集未更新的问题,请百度解决。

话不多说上代码:

1.分辨率降低一半的源程序

//降质两倍
void CImage_ProcessingView::On2times()
{
    // TODO: 在此添加命令处理程序代码
    if (m_Image.IsNull()) return;//判断图像是否为空,如果对空图像进行操作会出现未知的错误
    int w = m_Image.GetWidth();
    int h = m_Image.GetHeight();
    
    for(int m = 0;m         for (int n = 0; n < w / 2; ++n)
        {
            //取原图上2*2方阵的左上角像素赋值给降质图像的每个像素
            for (int j = 2 * m; j < (2 * m + 2); j++)      
            {
                for (int k = 2 * n; k < (2 * n + 2); k++)
                {

                    if (j == 2 * m && k == 2 * n)      //其余像素全部设置为白色
                    {
                        m_Image.m_pBits[0][m][n] = m_Image.m_pBits[0][j][k];
                        m_Image.m_pBits[1][m][n] = m_Image.m_pBits[1][j][k];
                        m_Image.m_pBits[2][m][n] = m_Image.m_pBits[2][j][k];

                        if (k >= h / 2 || j >= w / 2)
                        {
                            m_Image.m_pBits[0][j][k] = 255;
                            m_Image.m_pBits[1][j][k] = 255;
                            m_Image.m_pBits[2][j][k] = 255;
                        }
                    }
                    else
                    {
                        m_Image.m_pBits[0][j][k] = 255;
                        m_Image.m_pBits[1][j][k] = 255;
                        m_Image.m_pBits[2][j][k] = 255;
                    }                
                }
             }
            //取原图上2*2方阵的左上角像素赋值给降质图像的每个像素
        }
          Invalidate(1); //ONDRAW会绘制图像
}

2.处理结果

C++实现降低一幅图像的空间分辨率_第1张图片

                                                    原图    

 C++实现降低一幅图像的空间分辨率_第2张图片

                                                降质为1/2

C++实现降低一幅图像的空间分辨率_第3张图片

                                            降质为1/16

为了便于比较,三幅图像的对话框全部拖动到和原图大小一样大。

3.存在的一点小问题,这样的处理方法会出现非2^{n}长宽的图像会处理不全面,存在以下地方没有设置为白色,效果不好看。解决的方法是:先计算出应该隔几个像素采样一个,程序中只要按照这样的顺序进行采样就可以,请读者自己实现。

4.下面说一下在框架上添加要实现的图像处理代码的步骤。

    1.添加菜单选项

C++实现降低一幅图像的空间分辨率_第4张图片

       2.修改属性

          C++实现降低一幅图像的空间分辨率_第5张图片

      3.修改ID,使用英文修改,而且要做到命名可以解释对应的作用

          C++实现降低一幅图像的空间分辨率_第6张图片

        4.添加消息处理函数C++实现降低一幅图像的空间分辨率_第7张图片

      添加好程序后直接回调转到代码段,在对应的位置添加代码即可。

 

你可能感兴趣的:(数字图像处理)