MFC OPENCV学习笔记

MFC中步骤如下
1 单文档  MFC标准 在共享DLL中使用MFC 
2 CTestMFCView CScrollView
3 添加附加依赖项
4 往debug中加dll 
5 往工程中加CvvImgage.h CvvImgage.cpp 并在头文件和源文件中添加进入
6 在stdafx.h中加
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include "CvvImage.h"
/*
opencv_highgui243d.lib;
opencv_core243d.lib;
opencv_ml243d.lib;
opencv_imgproc243d.lib;
*/


7 类视图C。。。CDoc-双击
第一个pulic 中 
CvvImage m_image;
8 类视图中对C。。。CDoc 右击-属性 -重写
onopendocument 下拉-添加
添加了一段函数
BOOL COpencv_Task1Doc::OnOpenDocument(LPCTSTR lpszPathName)
在里面继续修改
添加到头文件和源文件,类视图doc.h中,添加 
m_image.Load(lpszPathName);
8步骤完成的是打开图片 但是还是看不到图片的,需要在view 写代码让图片显示出来
9 类视图中C。。。View 单击 下面ondraw(CDC *pDC) 双击
在里面添加
if(pDoc->m_image.GetImage())
{
RECT rect,rectDC;
GetClientRect(&rect);


rectDC=rect;


long rcWidth=rect.right-rect.left;
long rcHeight=rect.bottom-rect.top;
CSize szImg=CSize(pDoc->m_image.GetImage()->width,pDoc->m_image.GetImage()->height);

if(szImg.cy<rcHeight)
{
rectDC.bottom=rectDC.top+szImg.cy;
}
if(szImg.cx>rcWidth||szImg.cy>rcHeight)
{
SetScrollSizes(MM_TEXT,szImg);
}
rectDC.right=rectDC.left+szImg.cx;
rectDC.bottom=rectDC.top+szImg.cy;
//pDoc->m_image.DrawToHDC(pDC->GetSafeHdc(),&rectDC);
pDoc->m_image.DrawToHDC(pDC->GetSafeHdc(), &rectDC);
}
添加完后,此函数名 有个形参被屏蔽了记得修改过来void COpencv_Task1View::OnDraw(CDC* /*pDC*/)去掉/**/
9步骤就完成了图片的显示工作 
10 资源视图 menu-IDR_MAINFRAME双击 
单击某处 写入“图像处理”它的下拉菜单写入“直方图均衡化” 再对其右键单击 -属性-写ID号ID_IMG_PROC_EQUA
在对直方图均衡化 右键-添加事件处理程序
左侧不变 右侧选择C。。。CDoc 添加编辑
出现了一个函数 往此函数写代码--也就是怎么处理图像的代码
IplImage * src = m_image.GetImage();


if (src)
{
IplImage* imgChannel[4] = { 0, 0, 0, 0 };  
IplImage* dst = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 3 );

for( int i = 0; i < src -> nChannels; i++ )  
{  
imgChannel[i] = cvCreateImage( cvGetSize( src ), IPL_DEPTH_8U, 1 );  //****要求单通道图像才能直方图均衡化  ****//


//****通道分离  ****//
cvSplit( src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3] );//BGRA  
for( int i = 0; i < dst -> nChannels; i++ )  
{  
//****直方图均衡化,原始图像和目标图像必须是单通道  ****//
cvEqualizeHist( imgChannel[i], imgChannel[i] );  
}  

//****通道组合  ****//
cvMerge( imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dst );  
/*cvNamedWindow( "src", 1 );  
cvShowImage( "src", src );  
cvNamedWindow( "Equalize", 1 );  
cvShowImage( "Equalize", dst );  */

m_image.CopyOf(dst);


UpdateAllViews(NULL);


//****释放资源  ****//
for( int i = 0; i < src -> nChannels; i++ )  
{  
if( imgChannel[i] )  
{  
cvReleaseImage( &imgChannel[i] );  
//imgChannel[i] = 0;  
}  
}  

cvReleaseImage( &dst );  

}

以上完成的是图片的均衡化处理,后续将在这上面继续修改学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值