<style>
h1{color:#ff0000;text-align: center;}
h2{text-align: center;}
</style>
<section id="downloads" class="clearfix">
<a href="https://zhangqunwei.github.io/ImageProcessingMFC/Release/Release.zip" title="测试环境为Visual Studio 2013" style="float:left;" id="view-on-github" class="button"><span>下载exe</span></a>
<a href="https://zhangqunwei.github.io/ImageProcessingMFC/sourceZIP/ImageP.zip" title="测试环境为Visual Studio 2013" style="float:right;" id="view-on-github" class="button"><span>下载项目源码</span></a>
</section>
# 基于MFC的图像处理软件
根据《图像处理》课程内容实现基于MFC的图像处理软件,目前仅实现直方图均衡化、
线性平滑、线性锐化滤波三部分。
## GUI界面
![UI界面](https://zhangqunwei.github.io/ImageProcessingMFC/gui.bmp)
## MFC做图像处理的若干缺点
1.MFC对图像处理的支持基本为零,需要自己写DIB图像格式的底层接口。<br>
2.写出来的软件只能处理BMP一种图像格式,其它格式的不行。<br>
3.在图像的操作中还存在一个字节对齐的问题。<br>
4.图像是二维的,在MFC中获取图像的像素点时,如果调用库函数效率会特别低,如果用指针 通过寻址的方式在一维中找到与二维对应的点。效率虽然高但很容易出错。<br>
5.MFC具有很强的数据类型检查,编程中不仅要考虑图像处理的算法还得考虑数据的类型,所 有很容易出错。<br>
6.MFC中需要自己编写矩阵运算和复数运算,没有Matlab中那么方便。<br>
总之,对于图像处理MFC并不适合,如果是研究图像处理的算法最好还是用Matlab,因为Matlab也叫矩阵实验室,支持各种各样的图像操作,而且使用还很方便。当然也可以用OpenCV,本人未用过也就不介绍了。MFC更适合做普通的Windows软件。
部分源码:
{% highlight C++ %}
#include "stdafx.h"
#include "Dib.h"
CDib::CDib()
{
m_IsUseOBJ = FALSE;
m_pixelValue = 0;
}
CDib::~CDib()
{
}
/************************************************************************
* 直方图均衡化
************************************************************************/
void CDib::Histeq()
{
long lWidth, lHeight;
// 检索图像的长和宽
lWidth = GetWidth();
lHeight = GetHeight();
// 保存图片中各个灰度级的像素的个数
UINT pixelNum[256] = { 0 };
// 统计图片中每个灰度级像素的个数
for (int i = 0; i < lHeight; i++) // 每行
for (int j = 0; j < lWidth; j++) // 每列
{
// 检索像素点(j,i)的灰度值
m_pixelValue = (BYTE)GetPixel(j, i);
// 将灰度值作为数组的索引,并计数
pixelNum[m_pixelValue] = pixelNum[m_pixelValue] + 1;
}
// **1 原始直方图 (Original histogram ) [ 归一化 即计算各个灰度级的概率 ]
double Sk[256] = { 0 };
for (int i = 0; i < 256; i++)
Sk[i] = pixelNum[i] / (lHeight*lWidth*1.0);
// **2 累计直方图 (Cumulative histogram)
double Tk[256] = { 0 };
for (int i = 0; i < 256; i++)
if (i == 0)
Tk[i] = Sk[i];
else
Tk[i] = Tk[i - 1] + Sk[i];
// **3 取整扩展(Integral expansion)[ 公式:pixelCumu = int[(L-1)*pixelCumu+0.5](L为灰度级)]
for (int i = 0; i < 256; i++)
Tk[i] = UINT8((256 - 1)*Tk[i] + 0.5);
// **4 对灰度值进行映射并写入
for (int i = 0; i < lHeight; i++) // 每行
for (int j = 0; j < lWidth; j++) // 每列
{
m_pixelValue = (BYTE)GetPixel(j, i);
m_pixelValue = (BYTE)Tk[m_pixelValue];
SetPixel(j, i, RGB(m_pixelValue, m_pixelValue, m_pixelValue));
}
}// !void CDib::histeq()
/************************************************************************
* 使用3x3模版漫游图像
* 注意:1.处理时对应系数相乘,且已经将计算后的像素值写入图像
* 2.模板系数的数据类型为float型
************************************************************************/
void CDib::Template3x3(int arr[],double coef)
{
// 检索图像的长和宽
lWidth = GetWidth();
lHeight = GetHeight();
double sum = 0;
for (DWORD i = 0; i < lHeight - 3; i++) // 每行
for (DWORD j = 0; j < lHeight - 3; j++) // 每列
{ // 使用模板进行卷积计算
sum = arr[0] * (BYTE)GetPixel(j, i + 2) + arr[1] * (BYTE)GetPixel(j + 1, i + 2) + arr[2] * (BYTE)GetPixel(j + 2, i + 2) + sum;
sum = arr[3] * (BYTE)GetPixel(j, i + 1) + arr[4] * (BYTE)GetPixel(j + 1, i + 1) + arr[5] * (BYTE)GetPixel(j + 2, i + 1) + sum;
sum = arr[6] * (BYTE)GetPixel(j, i) + arr[7] * (BYTE)GetPixel(j + 1, i) + arr[8] * (BYTE)GetPixel(j + 2, i) + sum;
sum = (int)(sum*coef);
//计算绝对值
sum = fabs(sum);
//如果小于0,强制赋值为0
if (sum<0)
sum = 0;
//如果大于255,强制赋值为255
if (sum>255)
sum = 255;
SetPixel(j + 1, i + 1, RGB(sum, sum, sum));
}
}
{% endhighlight %}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。 【人工智能的深度探索】 人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。 【实战项目与源码分享】 我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。 【期待与您同行】 我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!
资源推荐
资源详情
资源评论
收起资源包目录
基于MFC的图像处理软件.zip (83个子文件)
资料总结
_config.yml 27B
Release
abc.BMP 65KB
Release.zip 1.97MB
ImageP.pdb 5.96MB
ImageP.exe 122KB
ImageP.sln 942B
ImageP
Show.cpp 81B
stdafx.h 2KB
ImageP.vcxproj 6KB
Dib.cpp 7KB
resource.h 970B
ImageP.cpp 4KB
MainFrm.cpp 2KB
ImagePDoc.cpp 3KB
ImageP.vcxproj.filters 3KB
res
Toolbar.bmp 1KB
ImagePDoc.ico 5KB
ImageP.rc2 668B
ImageP.ico 66KB
Release
ImagePView.obj 86KB
ImagePDoc.obj 63KB
vc120.pdb 6.34MB
ImageP.res 77KB
Dib.obj 54KB
ImageP.tlog
CL.write.1.tlog 4KB
rc.command.1.tlog 652B
rc.write.1.tlog 258B
ImageP.lastbuildstate 182B
rc.read.1.tlog 3KB
link.command.1.tlog 2KB
link.read.1.tlog 6KB
cl.command.1.tlog 5KB
link.write.1.tlog 1KB
CL.read.1.tlog 57KB
stdafx.obj 5.2MB
ImageP.log 233B
Show.obj 52KB
ImageP.pch 37.5MB
MainFrm.obj 50KB
ImageP.obj 67KB
ImageP.rc 11KB
ImageP.aps 119KB
ImagePView.h 1KB
MainFrm.h 644B
ReadMe.txt 5KB
ImagePView.cpp 7KB
Show.h 300B
ImageP.h 467B
ImageP.vcxproj.user 162B
Dib.h 723B
Debug
ImagePView.obj 167KB
Template.obj 27KB
ImagePDoc.obj 167KB
vc120.pdb 6.46MB
ImageP.res 77KB
Dib.obj 54KB
ImageP.tlog
CL.write.1.tlog 26KB
rc.command.1.tlog 1KB
rc.write.1.tlog 606B
ImageP.lastbuildstate 180B
rc.read.1.tlog 6KB
link.command.1.tlog 5KB
link.read.1.tlog 13KB
cl.command.1.tlog 12KB
link.write.1.tlog 3KB
CL.read.1.tlog 115KB
stdafx.obj 883KB
ImageP.log 362B
vc120.idb 2.69MB
Show.obj 29KB
ImageP.pch 44.63MB
MainFrm.obj 30KB
ImageP.obj 48KB
stdafx.cpp 131B
targetver.h 226B
ImagePDoc.h 881B
sourceZIP
ImageP.zip 33.22MB
ImageP.v12.suo 63KB
Debug
ImageP.pdb 7.56MB
ImageP.exe 247KB
ImageP.ilk 1.64MB
README.md 5KB
gui.bmp 2MB
共 83 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功