精华内容
下载资源
问答
  • Opencv+MFC框架图像处理

    2019-01-03 10:01:14
    本次项目采用Opencv+MFC框架,通过对源代码的学习和借鉴,完成了对图像进行点处理、邻域处理、二值化、二值图像处理、形态学处理、彩色图像处理、综合处理、视频采集播放这些常用功能。
  • Mfc图像处理框架 VC编程 图像显示与处理Cimage显示OPencv处理
  • 之前,失败了无数次,把我给整疯了,这次终于成功了! 现在将搭建的方法发到博客上...现在开始搭建框架 新建MFC应用程序 应用程序类型设置 把文件DIb.h和Dib.cpp拷贝到项目文件夹下 把dib.h添加到项目的“.

    之前,失败了无数次,把我给整疯了,这次终于成功了!

    现在将搭建的方法发到博客上。

    最终解决的途径

    跳出思维局限,不要拘泥于某一个版本,比如vs2019或者vs2017,说不定vs2015就可以呢?

    这次vs2015就成功了!

    首先安装vs2015社区版

    下载的时候记得勾选Visual C++

    >>官方下载器地址

    现在开始搭建框架

    新建MFC应用程序

    应用程序类型设置

    把文件DIb.h和Dib.cpp拷贝到项目文件夹下

    把dib.h添加到项目的“解决方案”下的“头文件”

    把dib.cpp文件添加到项目的“解决方案”下的“源文件”

    修改代码部分

    重要提示:

    每一个类都有一个头文件(.h)和源文件(.cpp)

    一定要看清楚,不要加错了

    ----------------------------------Doc.h--------------------------------------------

    修改一

    找到 #pragma once

    在下面添加

    #include "Dib.h"

    修改二

    找到特性和操作,直接替换

    // 特性
    public:
    	CDib m_dib;
    // 操作
    public:
    	HGLOBAL GetHObject() const	//获取Dib对象的句柄
    		{ return m_hDIB; }
    	CPalette* GetDocPal() const	//获取调色板指针
    		{ return m_palDIB; }
    	CSize GetDocDimension() const//获取调色板大小
    		{ return m_sizeDoc; }
    	void UpdateObject(HGLOBAL hDIB);//更新dib对象

    修改三

    找到实现

    // 实现
    public:
    	void SetDib();				//初始化dib对象
    protected:
    	HGLOBAL m_hDIB;
    	CPalette*  m_palDIB;
    	CSize m_sizeDoc;

    -----------------------doc类重写函数(打开、保存文件)的添加----------------------------

    类视图,打开属性

    在此添加Open、Save函数(不可手动复制添加)

    -------------------------------------Doc.cpp-----------------------------------------

    找到构造函数

    // TODO: 在此添加一次性构造代码
    	m_hDIB = NULL;// 初始化变量
    	m_palDIB = NULL;
    	m_sizeDoc = CSize(1,1);

    找到析构函数

            if (m_hDIB != NULL)// 判断是否有DIB对象
    	{		
    		::GlobalFree((HGLOBAL) m_hDIB);
    	}
    	
    	
    	if (m_palDIB != NULL)// 判断调色板是否存在
    	{
    		delete m_palDIB;
    	}

    找到OnOpenDocument函数

            if (!CDocument::OnOpenDocument(lpszPathName))
    		return FALSE;
    
    	// TODO:  在此添加您专用的创建代码
    	CFile file;
    	if (!file.Open(lpszPathName, CFile::modeRead | 
    		CFile::shareDenyWrite))// 打开文件
    	{					
    		return FALSE;// 返回FALSE
    	}	
    	DeleteContents();
    	m_hDIB=m_dib.LoadFile(file);
    	if(m_hDIB==NULL)// 调用LoadFile()读取图象
    	{			
    		return FALSE;
    	}		
    	SetDib();// 初始化DIB
    	if (m_hDIB == NULL)	// 判断读取文件是否成功
    	{		
    		AfxMessageBox(L"读取图像时出错");// 提示出错				
    		return FALSE;// 返回FALSE
    	}		
    	SetPathName(lpszPathName);// 设置文件名称		
    	SetModifiedFlag(FALSE);// 初始化修改标记为FALSE		
    	return TRUE;// 返回TRUE

    找到OnSaveDocument函数

            // TODO: 在此添加专用代码和/或调用基类
    	CFile file;
    	if(!file.Open(lpszPathName, CFile::modeCreate |// 打开文件
    	CFile::modeReadWrite | CFile::shareExclusive))
    	{
    		return FALSE;// 返回FALSE
    	}
    	BOOL bSuccess = FALSE;	
    	bSuccess = m_dib.SaveFile(m_hDIB, file);	// 保存图象	
    	file.Close();// 关闭文件	
    	SetModifiedFlag(FALSE);// 重置脏标记为FALSE
    	if (!bSuccess)
    	{			
    		AfxMessageBox(L"保存BMP图象时出错");// 提示出错
    	}	
    	return bSuccess;
    	//return CDocument::OnSaveDocument(lpszPathName);

    现在检查Doc类是否已经存在SetDib函数和UpdateObject函数

    若不存在,则手动添加,随后粘贴代码

    若存在,直接复制粘贴如下代码到Doc.cpp文件中,并修改类名部分

    类名根据项目名称的不同而不同

    void C********Doc::SetDib() //这个函数需要手动添加,前面的类名要与项目一致
    {
    	LPSTR lpdib = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);	
    	
    	if (m_dib.GetWidth(lpdib) > INT_MAX ||m_dib.GetHeight(lpdib) > INT_MAX)// 判断图象是否过大
    	{
    		::GlobalUnlock((HGLOBAL) m_hDIB);				
    		::GlobalFree((HGLOBAL) m_hDIB);	// 释放DIB对象			
    		m_hDIB = NULL;// 设置DIB为空		
    		AfxMessageBox(L"初始化失败"); 		
    		return;
    	}	
    	m_sizeDoc = CSize((int)m_dib.GetWidth(lpdib), (int)m_dib.GetHeight(lpdib));// 设置文档大小	
    	::GlobalUnlock((HGLOBAL) m_hDIB);	
    	m_palDIB = new CPalette;// 创建新调色板		
    	if (m_palDIB == NULL)// 判断是否创建成功
    	{		
    		::GlobalFree((HGLOBAL) m_hDIB);	// 失败		
    		m_hDIB = NULL;// 设置DIB对象为空
    		return;
    	}	
    	// 调用CreateDIBPalette来创建调色板
    	if (m_dib.ConstructPalette(m_hDIB, m_palDIB) == NULL)
    	{				
    		delete m_palDIB;// 删除				
    		m_palDIB = NULL;// 设置为空	
    		return;// 返回空
    	}
    }
    void C********Doc::UpdateObject(HGLOBAL hDIB)   //这个函数需要手动添加,类名要修改
    {
    	if (m_hDIB != NULL)               // 判断DIB是否为空
    	{		
    		::GlobalFree((HGLOBAL) m_hDIB);// 非空,则清除
    	}	
    	m_hDIB = hDIB;                     // 替换成新的DIB对象	
    }

    ---------------------------View.cpp----------------------------

    找到OnDraw函数

    看到这里

    删去注释,解除封印

    看到这一行,在下面添加代码

            // TODO: 在此处为本机数据添加绘制代码
    	HGLOBAL hDIB = pDoc->GetHObject();
    	
    	// 判断DIB是否为空
    	if (hDIB != NULL)
    	{
    		LPSTR lpDibSection = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
    		
    		// 获取DIB宽度
    		int cxDIB = (int) pDoc->m_dib.GetWidth(lpDibSection);
    		
    		// 获取DIB高度
    		 int cyDIB = (int) pDoc->m_dib.GetHeight(lpDibSection);
    		::GlobalUnlock((HGLOBAL) hDIB);
    		CRect rcDIB;
    		rcDIB.top = rcDIB.left = 0;
    		rcDIB.right = cxDIB;
    		rcDIB.bottom = cyDIB;
    		CRect rcDest= rcDIB;	
    		// 输出DIB
    		pDoc->m_dib.DrawDib(pDC->m_hDC, &rcDest, pDoc->GetHObject(),
    			&rcDIB, pDoc->GetDocPal());
    	}

    在确保项目文件夹下已有stdafx.h”“stdafx.cpp存在时,编译执行

    效果

     

     

     

     

    展开全文
  • 一、课程背景数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于...
        

    一、课程背景

    数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于空间探测、遥感、生物医学、人工智能以及工业检测等许多领域,并促使这些学科产生了新的发展。

    图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着科学技术的发展,数字图像处理技术的应用领域也将随之不断扩大。

    正因为图像处理在社会生活中有着越来越重要的作用,这也就体现了我们学习这门课程的必要性。而通过课程的学习可以让我们掌握一些图像处理的初步技术,从而为今后在图像处理的学习方面打下了基础。

    二、课程选题

    由于老师并没有做出规定去做哪一道题目,这给了我们很大程度上的自主性。我根据自身的情况和能力,选择了经典的几种边缘检测算子的特点的比较这个题目,和图象的平移和镜像,又因为在计算机图形学这门课中有讲到图片相加的具体程序,在这里图简单做一下颜色取反。通过对这些算法的编写,更加深入地了解了图像处理的过程,并且也在一定程度上提高了自己的编程能力。

    边缘检测技术是所有基于边界分割的图像分析方法的第一步,首先检测出图像局部特性的不连续性,再将它们连成边界,这些边界把图像分成不同的区域,检测出边缘的图像就可以进行特征提取和形状分析。为了得到较好的边缘效果,现在已经有了很多的边缘检测算法以及一些边缘检测算子的改进算法。但各算子有自己的优缺点和适用领域。基于以上理由,在此对学到的一些一些经典边缘检测算子进行实际编程验证,以便实际应用中更好地发挥其长处。

    点击下载源码

    17010799-89d9c0f44a77bd1b.png
    展开全文
  • MFC平台的图像处理

    2019-01-03 10:06:15
    本次项目采用Opencv+MFC框架,通过对源代码的学习和借鉴,完成了对图像进行点处理、邻域处理、二值化、二值图像处理、形态学处理、彩色图像处理、综合处理、视频采集播放这些常用功能。
  • 一、课程背景数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于...

    一、课程背景

    数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于空间探测、遥感、生物医学、人工智能以及工业检测等许多领域,并促使这些学科产生了新的发展。

    图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着科学技术的发展,数字图像处理技术的应用领域也将随之不断扩大。

    正因为图像处理在社会生活中有着越来越重要的作用,这也就体现了我们学习这门课程的必要性。而通过课程的学习可以让我们掌握一些图像处理的初步技术,从而为今后在图像处理的学习方面打下了基础。

    二、课程选题

    由于老师并没有做出规定去做哪一道题目,这给了我们很大程度上的自主性。我根据自身的情况和能力,选择了经典的几种边缘检测算子的特点的比较这个题目,和图象的平移和镜像,又因为在计算机图形学这门课中有讲到图片相加的具体程序,在这里图简单做一下颜色取反。通过对这些算法的编写,更加深入地了解了图像处理的过程,并且也在一定程度上提高了自己的编程能力。

    边缘检测技术是所有基于边界分割的图像分析方法的第一步,首先检测出图像局部特性的不连续性,再将它们连成边界,这些边界把图像分成不同的区域,检测出边缘的图像就可以进行特征提取和形状分析。为了得到较好的边缘效果,现在已经有了很多的边缘检测算法以及一些边缘检测算子的改进算法。但各算子有自己的优缺点和适用领域。基于以上理由,在此对学到的一些一些经典边缘检测算子进行实际编程验证,以便实际应用中更好地发挥其长处。

    三、设计思想

    拉普拉斯算子

    拉普拉斯算子是二阶微分算子,其差分的表示形式如下:

    d4e170413b673c438c7b3787729c740a.png

    e0107cd482b5ae360778cc9270700478.png

    252811f99e1078a6bf11c76eb49d89ae.png

    e0107cd482b5ae360778cc9270700478.png

    参考文档和完整的文档和源码下载地址:

    https://www.write-bug.com/article/1289.html

    展开全文
  • opencv+MFC图像处理程序

    2017-01-12 13:47:48
    使用opncv2.49和VS2010,利用MFC框架做的图像处理软件
  • 数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于空间探测、...
        

    一、课程背景

    数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于空间探测、遥感、生物医学、人工智能以及工业检测等许多领域,并促使这些学科产生了新的发展。

    图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面。随着科学技术的发展,数字图像处理技术的应用领域也将随之不断扩大。

    正因为图像处理在社会生活中有着越来越重要的作用,这也就体现了我们学习这门课程的必要性。而通过课程的学习可以让我们掌握一些图像处理的初步技术,从而为今后在图像处理的学习方面打下了基础。

    二、课程选题

    由于老师并没有做出规定去做哪一道题目,这给了我们很大程度上的自主性。我根据自身的情况和能力,选择了经典的几种边缘检测算子的特点的比较这个题目,和图象的平移和镜像,又因为在计算机图形学这门课中有讲到图片相加的具体程序,在这里图简单做一下颜色取反。通过对这些算法的编写,更加深入地了解了图像处理的过程,并且也在一定程度上提高了自己的编程能力。

    边缘检测技术是所有基于边界分割的图像分析方法的第一步,首先检测出图像局部特性的不连续性,再将它们连成边界,这些边界把图像分成不同的区域,检测出边缘的图像就可以进行特征提取和形状分析。为了得到较好的边缘效果,现在已经有了很多的边缘检测算法以及一些边缘检测算子的改进算法。但各算子有自己的优缺点和适用领域。基于以上理由,在此对学到的一些一些经典边缘检测算子进行实际编程验证,以便实际应用中更好地发挥其长处。


    18423381-e6d2b31d8e279148.png

    源码下载地址:https://www.write-bug.com/article/1289.html

    展开全文
  • 一、学习参考文件 ...2、《MFC多文档中OpenCV处理图像打开和保存》,http://blog.csdn.net/abcjennifer/article/details/7313711 二、环境搭建 1、安装VS2013和OpenCV库 详细参见:http://blog.csdn.net/lvhao
  • 遥感图像处理系统MFC

    2019-03-27 21:34:46
    遥感图像处理系统的MFC框架,注意只是框架,软件内部函数还需要自己去写
  • 图像处理程序框架MFC相关知识点

    千次阅读 2014-05-20 10:14:18
    MFC基础类库定义了设备环境对象类----CDC类。 CDC与CGdiObject的关系 说道CDC类就不能不提一下GdiObject---图形对象类。 在Windows应用程序中,设备环境与图形对象共同工作,协同完成绘图显示工作。就像画家绘画一样...
  • MFC框架的dialog对话框内绘制图像直方图 最近正在学数字图像处理,其中有个作业要求使用c++绘制图像的直方图,于是写下此文作为记录,同时希望能各路大神能多多指教。 实现过程 1.1实现个菜单响应 首先应该给...
  • 上一篇我们说到如何用MFC框架实现点击打开按钮能够打开一张图片在窗口上显示和另存为按钮能够保存到另一个文件,那么现在我们对图片进行简单的处理。 我们知道,图片是由一个一个像素组成的,我们后来会对图像处理...
  • 本科毕设时,为了进行演示曾按照网上的方法搭建了一个基于MFC多文档视图界面(MDI)的图像处理框架程序。但是由于对于windows编程的原理不甚了解,过程中遇到了很多细节上的问题,因此整理一下整个过程,便于以后...
  • 代码实现BMP中RGB 三色的读取,基于MFC框架下的简易图像处理,可供参考,但很多完善的功能暂时还没写进去,只是为了做练习,别无其他目的

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 157
精华内容 62
关键字:

mfc框架图像处理