利用vs创建mfc相对于qt会更容易上手,但是界面上会远不如其好看。
0 创建解决方案
1 配置环境
添加需要使用opencv的两个文件
将其分别添加到头文件和源文件
在….Dlg.h文件中添加几个include引用:
#include "cv.h"
#include "highgui.h"
#include "CvvImage.h"
2 界面设置
菜单,视图,工具箱,打开工具箱
一、选中Button控件-将Button从工具箱向窗体拖动,添加按钮-双击添加button的启动函数
例如读取指定文件夹下的文件:
// TODO: 在此添加控件通知处理程序代码
CString FilePath;
CFileDialog FileDlg(TRUE);
if (IDOK == FileDlg.DoModal())
{
//获取FileOpen对话框返回的路径名
FilePath = FileDlg.GetPathName();
//GetPathName返回的是CString类型,要经过转换为string类型才能使用imread打开图片
std::string pathName(FilePath.GetBuffer());
//读取图片
cv::Mat orgImg = cv::imread(pathName); (视频也OK)
}
二、同理,添加Picture Control控件-右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC(可自己随意设置),修改Type为Rectangle-将Picture控件大小调整合适,–右击添加的按钮,属性-可将Caption改为OpenImg(随意修改,中午也OK)–双击按钮,添加事件处理程序,会自动生成相对应的代码(将需要处理的代码放置在函数中)
利用Picture Control显示图片或视频:
//显示图片
RECT win_rect;
::GetClientRect(GetDlgItem(IDC_WINDOWS)->GetSafeHwnd(), &win_rect);
cv::Mat imgShow( abs(win_rect.top - win_rect.bottom), abs(win_rect.right - win_rect.left), CV_8UC3 );
resize( TestImage, imgShow, imgShow.size() );
//在控件上显示要用到的CImage类图片
ATL::CImage CI;
int w=imgShow.cols;//宽
int h=imgShow.rows;//高
int channels=imgShow.channels();//通道数
CI.Create( w, h, 8*channels); //CI像素的复制
uchar *pS; uchar *pImg=(uchar *)CI.GetBits();//得到CImage数据区地址
int step=CI.GetPitch();
for(int i=0;i<h;i++)
{
pS=imgShow.ptr<uchar>(i);
for(int j=0;j<w;j++)
{
for(int k=0;k<3;k++)
*(pImg+i*step+j*3+k)=pS[j*3+k]; //注意到这里的step不用乘以3
}
}
//在控件显示图片
HDC dc ;
dc = ::GetDC(GetDlgItem(IDC_WINDOWS)->GetSafeHwnd());
CI.Draw( dc, 0, 0 );
::ReleaseDC( GetDlgItem(IDC_WINDOWS)->GetSafeHwnd(), dc);
CI.Destroy();
三、添加输出框
类似于这个样子
这里面涉及几个点,首先实现代码:
string SS_String = SS.str();//SS为一个stringstream SS(stringstream::in | stringstream::out);用来存东西的
cstr += SS_String.c_str();
GetDlgItem(IDC_SHOW_OUTPUT)->SetWindowText(cstr);
m_recvshw.LineScroll(m_recvshw.GetLineCount());//m_recvshw为该编辑框的成员变量(也就是control类型的变量) ,右键按钮-添加变量-设置变量名(这里是m_recvshw)
cstr += _T("\r\n");//换行
滚动及自动换行:
1.新建一个编辑框控件(Edit Control),将其多行(Multiline)前面打勾(属性设置为True),Auto HScroll前面的勾去掉(属性设置False),这样就可以实现每一行填满后自动换行了。
2.再将垂直滚动条(Vetrical Scroll)前面打勾(属性设置为True),当输入或显示超过编辑框的大小后就会出现垂直滚动条。