本人在学习图像处理时使用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.存在的一点小问题,这样的处理方法会出现非长宽的图像会处理不全面,存在以下地方没有设置为白色,效果不好看。解决的方法是:先计算出应该隔几个像素采样一个,程序中只要按照这样的顺序进行采样就可以,请读者自己实现。
4.下面说一下在框架上添加要实现的图像处理代码的步骤。
1.添加菜单选项
2.修改属性
3.修改ID,使用英文修改,而且要做到命名可以解释对应的作用
4.添加消息处理函数
添加好程序后直接回调转到代码段,在对应的位置添加代码即可。