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

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

附上框架百度云盘资源:

链接:百度网盘-链接不存在
注意:使用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<h/2;++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.处理结果

                                                    原图    

 

                                                降质为1/2

                                            降质为1/16

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

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

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

    1.添加菜单选项

       2.修改属性

          

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

          

        4.添加消息处理函数

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

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值