初学数字图像识别与处理——C++实现降低一幅图像的空间分辨率

初学数字图像识别与处理——C++实现将一幅图像降质为多个低空间分辨率的图像

大家好! 初学数字图像识别与处理,导师推荐了一些书籍、视频还有编程题。该贴主要用于记录我的学学习,供以后的初学者参考及我自己的回忆。有问题的话,各位看官可以提出来。(PS.反正我是不会听得,哎,就是玩)

20210502

题目:编程将一幅图像降质为多个低空间分辨率的图像

1.概念分析

降质:(有点看不懂网上的解释)利用计算机对数字化的图像进行加工的技术。借助于数字图像处理可得到符合人们某些要求的新图像或非图像信息,以便于人的理解以及机器的识别。这些要求是:改善图像质量,压缩冗余信息,提取特征信息和识别静止或运动目标。(出自《中国电力百科全书》,但是为明确定义为降质,但是大概这个意思)
空间分辨率:空间分辨率,是指遥感图像上能够详细区分的最小单元的尺寸或大小,是用来表征影像分辨地面目标细节的指标。通常用像元大小、像解率或视场角来表示。(来自百度百科)

2.题目分析

首先看了网上的一些题目分析解释和代码(来自博主SurpriseDPD
地址:https://blog.csdn.net/weixin_42112828/article/details/86540343)

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会绘制图像
}

————————————————
但是运行后,图像会多出一些东西:
在这里运行前的图像:
运行前图像
这是运行后的:
在这里插入图片描述
后面我乱理解了理解,好像置白色区域未选全,我改了改:

void CImage_ProcessingView::Onjiangzhi2()
{
	// TODO:  在此添加命令处理程序代码
	if (m_Image.IsNull()) return;//判断图像是否为空,如果对空图像进行操作会出现未知的错误
	int w = m_Image.GetWidth();
	int h = m_Image.GetHeight();
	int w2 = w / 2;
	int h2 = h / 2;//计算降质后图像大小

	for (int j = 0; j<h; j++)
	{
		for (int k = 0; k<w; k++)
		{
			if (j < h2 && k < w2)
			{
				m_Image.m_pBits[0][j][k] = m_Image.m_pBits[0][j * 2][k * 2];
				m_Image.m_pBits[1][j][k] = m_Image.m_pBits[1][j * 2][k * 2];
				m_Image.m_pBits[2][j][k] = m_Image.m_pBits[2][j * 2][k * 2];
			}		
		}
	}//此处用来形成将降质后图像

	for (int j = 0; j<h; j++)
	{
		for (int k = 0; k<w; k++)
		{
			if (j >= h2 || k >= w2)
			{
				m_Image.m_pBits[0][j][k] = 255;
				m_Image.m_pBits[1][j][k] = 255;
				m_Image.m_pBits[2][j][k] = 255;
			}
		}
	}//此处用来将降质后图像之外的空间置白色

	Invalidate(1); //ONDRAW会绘制图像
}

在这里插入图片描述
就是奇怪背景咋个不是白色,后面再看看啥意思。

来自博主SurpriseDPD 的代码 地址:https://blog.csdn.net/weixin_42112828/article/details/86540343

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值