一、VS2010

新建一个MFC工程,添加两个picture控件和一个按钮控件。

二、添加变量

1、为两个picture控件添加control变量,类型为CStatic,变量名分别为m_picture1和m_picture2.
2、添加保存图片路径和名称变量,CString类型,变量名strFilePath,strFileName

三、添加按钮消息映射函数

双击“打开图片”按钮进入消息映射函数,添加以下代码:
一、为按钮添加打开文件的功能,并默认打开.png格式的文件,并在打开文件右下角添加文件类型选项。

 CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("image Files(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*|"), this);fileDlg.DoModal();strFilePath=fileDlg.GetPathName();        //文件路径strFileName = fileDlg.GetFileName(); //文件名if (strFilePath == _T("")){return;}CImage image;image.Load(strFilePath);

二、将打开的图片显示在picture控件上。

 CRect rectControl;                        //控件矩形对象m_picture1.GetClientRect(rectControl);CDC *pDc = m_picture1.GetDC();          //设备上下文对象的类rectControl = CRect(rectControl.TopLeft(), CSize((int)rectControl.Width(), (int)rectControl.Height()));m_picture1.SetBitmap(NULL);             //清空pictureimage.Draw(pDc->m_hDC, rectControl);    //将图片绘制到Picture控件表示的矩形区域image.Destroy();m_picture1.ReleaseDC(pDc);

三、对图片进行简单二值化处理。使用前先在.cpp文件中添加 #include “vector”

 byte* pRealData;pRealData = (byte*)image.GetBits();    //获取到图片内存点的位置int width = image.GetWidth();int height = image.GetHeight();int pit = image.GetPitch();         //图像每行字节数int bitCount = image.GetBPP() / 8;    //获取每像素的位数~~/8得到字节数vector <int> gray(256);            //初始化时自动存0,用来存放256种颜色出现的次数for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){gray.at((int)(*(pRealData + pit*i + j*bitCount))) += 1;           //像素被用到的次数加一}}//进行二值化处理int max = 0;    int sec = 0;int locamax = 0;int locasec = 0;for (int i = 0; i < 256; i++){if (gray[i] > max){max = gray[i];    //得到被使用次数最多的像素locamax = i;}}for (int i = 0; i < 256; i++){if (gray[i] > sec&&abs(i-locamax)>10)    //得到被使用次数第二多的像素{sec = gray[i];locasec = i;}}int min = (locamax + locasec) / 2;  //取中间值,大于中间值的变成黑色,小于中间值的变成白色for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){if ((int)(*(pRealData + pit*i + j*bitCount)) < min){*(pRealData + pit*i + j*bitCount) = 0;*(pRealData + pit*i + j*bitCount+1) = 0;*(pRealData + pit*i + j*bitCount+2) = 0;}else{*(pRealData + pit*i + j*bitCount) = 255;*(pRealData + pit*i + j*bitCount + 1) = 255;*(pRealData + pit*i + j*bitCount + 2) = 255;}}}//处理完的图片显示在picture2上m_picture2.GetClientRect(rectControl);pDc = m_picture2.GetDC();rectControl = CRect(rectControl.TopLeft(), CSize((int)rectControl.Width(), (int)rectControl.Height()));m_picture2.SetBitmap(NULL);image.Draw(pDc->m_hDC, rectControl);                //将图片绘制到Picture控件表示的矩形区域image.Save(_T("D:\\图片.png"));                      //将图片保存到D盘中image.Destroy();             //释放m_picture2.ReleaseDC(pDc);      //释放

编译完成后效果图

图片灰度值处理函数

可将上面二值化处理函数用下面代替

 for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){*(pRealData + pit*i + j*bitCount) *=0.114 ;*(pRealData + pit*i + j*bitCount+1) *=0.587 ;*(pRealData + pit*i + j*bitCount+2) *=0.299 ;}}

效果:

参考链接:
[1]: https://www.cnblogs.com/Forever-Road/p/6800838.html
[2]: https://blog.csdn.net/whw8007/article/details/18473219?utm_source=blogxgwz0

C++ MFC打开图片并进行简单算法处理相关推荐

  1. C++ MFC打开图片并进行简单算法处理

    C++ MFC打开图片并进行简单算法处理 VC++中建立新项目 双击"打开图片"按钮进入消息映射函数,添加以下代码: 一.为按钮添加打开文件的功能,并默认打开.png格式的文件,并 ...

  2. VS2013 MFC + OpenCV3.0 打开图片

    本文仅涉及一些核心步骤,具体 OpenCV 的配置以及其他的细节问题,请参考 VS2010 / MFC + OpenCV 2.4.1打开图片. 1. 新建 MFC 对话框项目 基于对话框,不使用Uni ...

  3. Qt实现简单项目——打开图片

    实现功能:通过按钮打开本地图片并显示. 效果如下: 步骤: 1.新建工程 点击"new"新建,选择QT窗体应用,如下图所示 给工程命名,注意名字中不要带有中文,选择保存路径,下一步 ...

  4. OpenCVQt学习之一——打开图片文件并显示

    摸索了一段时间了,期间杂七杂八干了很多零活,花在这上面的时间不是太多,现在回头把资料简单整理. OpenCV和Qt学习在入门阶段最大的困惑时版本不统一所带来的影响,Qt稍微好一点,OpenCV目前的大 ...

  5. 给MFC添加图片,动图,添加背景音乐(打包大放送)

    最近突然有了一种想用MFC做贺卡的想法,做成一个.exe程序,让被祝贺的人可以用电脑在任何位置打开观看,这就要求所使用资源必须添加至MFC工程,下面的方法都是本人测试过的,希望对你有所帮助呦! 1添加 ...

  6. TensorFlow与OpenCV,读取图片,进行简单操作并显示

    本文是OpenCV  2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonO ...

  7. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  8. python如何调用图片-用python简单处理图片(4):图像中的像素访问

    前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

  9. php 识别图片主色调,PHP 判断图片主色调的简单示例

    这篇文章主要为大家详细介绍了PHP 判断图片主色调的简单示例,具有一定的参考价值,可以用来参考一下. 这段代码可以帮助你判断任意图片的主色调,使用了简单的统计算法实现 ,感兴趣的小伙伴,下面一起跟随5 ...

最新文章

  1. MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)
  2. mysql死锁场景汇总整理
  3. Android内存分析
  4. [New Portal]Windows Azure Cloud Service (33) 使用Visual Studio 2012 部署Cloud Service
  5. 一个简单的Map Iterator性能测试
  6. 【JavaWeb】JavaScript基础篇+高级篇
  7. oracle中的fetchsize,oracle setFetchsize() 优化查询速度
  8. WPF视频会议系统资料
  9. ssm连接mysql引入外部配置文件username无法被正确解析
  10. android 下载服务器的txt文档
  11. C#控制BarTender自动打印(方法一)
  12. 如何使用.REG文件来操作注册表
  13. ARCGIS中的子类型(SUBTYPE)认识
  14. 组播IGMP 自学笔记
  15. 如何批量添加图片到ppt的方法
  16. 初学者都能学会的ElasticSearch入门实战《玩转ElasticSearch 2》
  17. 大型互联网公司如何防止黑客入侵?(下)
  18. 苹果个人开发者账号申请+获取证书+上架应用商城
  19. 国产服务器(aarch64) Kettle 修改
  20. 内核网络接口层的实现

热门文章

  1. SparkCore核心机制详解
  2. “机智号”火星直升机能不能撑过第一个火星冬天?
  3. nvcc --version: nvcc不是内部或外部命令
  4. 这是关于淘宝的一条重磅消息
  5. 鼠标滑过显示红色禁用符号
  6. python实现企业微信群机器人提醒功能
  7. java输入日期判断这天是周几
  8. oracle 把结果加上百分号_用一条sql语句显示数据百分比并加百分号
  9. mac下实用的代码编辑器
  10. JSON Editor 中文文档