C++ MFC打开图片并进行简单算法处理
一、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打开图片并进行简单算法处理相关推荐
- C++ MFC打开图片并进行简单算法处理
C++ MFC打开图片并进行简单算法处理 VC++中建立新项目 双击"打开图片"按钮进入消息映射函数,添加以下代码: 一.为按钮添加打开文件的功能,并默认打开.png格式的文件,并 ...
- VS2013 MFC + OpenCV3.0 打开图片
本文仅涉及一些核心步骤,具体 OpenCV 的配置以及其他的细节问题,请参考 VS2010 / MFC + OpenCV 2.4.1打开图片. 1. 新建 MFC 对话框项目 基于对话框,不使用Uni ...
- Qt实现简单项目——打开图片
实现功能:通过按钮打开本地图片并显示. 效果如下: 步骤: 1.新建工程 点击"new"新建,选择QT窗体应用,如下图所示 给工程命名,注意名字中不要带有中文,选择保存路径,下一步 ...
- OpenCVQt学习之一——打开图片文件并显示
摸索了一段时间了,期间杂七杂八干了很多零活,花在这上面的时间不是太多,现在回头把资料简单整理. OpenCV和Qt学习在入门阶段最大的困惑时版本不统一所带来的影响,Qt稍微好一点,OpenCV目前的大 ...
- 给MFC添加图片,动图,添加背景音乐(打包大放送)
最近突然有了一种想用MFC做贺卡的想法,做成一个.exe程序,让被祝贺的人可以用电脑在任何位置打开观看,这就要求所使用资源必须添加至MFC工程,下面的方法都是本人测试过的,希望对你有所帮助呦! 1添加 ...
- TensorFlow与OpenCV,读取图片,进行简单操作并显示
本文是OpenCV 2 Computer Vision Application Programming Cookbook读书笔记的第一篇.在笔记中将以Python语言改写每章的代码. PythonO ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- python如何调用图片-用python简单处理图片(4):图像中的像素访问
前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...
- php 识别图片主色调,PHP 判断图片主色调的简单示例
这篇文章主要为大家详细介绍了PHP 判断图片主色调的简单示例,具有一定的参考价值,可以用来参考一下. 这段代码可以帮助你判断任意图片的主色调,使用了简单的统计算法实现 ,感兴趣的小伙伴,下面一起跟随5 ...
最新文章
- MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)
- mysql死锁场景汇总整理
- Android内存分析
- [New Portal]Windows Azure Cloud Service (33) 使用Visual Studio 2012 部署Cloud Service
- 一个简单的Map Iterator性能测试
- 【JavaWeb】JavaScript基础篇+高级篇
- oracle中的fetchsize,oracle setFetchsize() 优化查询速度
- WPF视频会议系统资料
- ssm连接mysql引入外部配置文件username无法被正确解析
- android 下载服务器的txt文档
- C#控制BarTender自动打印(方法一)
- 如何使用.REG文件来操作注册表
- ARCGIS中的子类型(SUBTYPE)认识
- 组播IGMP 自学笔记
- 如何批量添加图片到ppt的方法
- 初学者都能学会的ElasticSearch入门实战《玩转ElasticSearch 2》
- 大型互联网公司如何防止黑客入侵?(下)
- 苹果个人开发者账号申请+获取证书+上架应用商城
- 国产服务器(aarch64) Kettle 修改
- 内核网络接口层的实现