因为我所记录的基本是MFC版本的,所以在做MFC之前必须对目前网上使用最多的win32程序了解清楚,因此从本章开始基本都是先分析win32版本,再着手编写mfc版本。
一、win32版本
win32版本的开始头文件格式基本都是一样开始的,#include <opencv2/opencv.hpp>,为了代码简洁书写方便都是在头文件之后包含cv命名空间,using namespace cv;。
由于比较简单的代码,不再赘述,直接以代码的形式给出。代码是浅墨的opencv3.0那本书里的。
#include <opencv2/opencv.hpp> //头文件
using namespace cv; //包含cv命名空间
void main( )
{
// 【1】读入一张图片,载入图像
Mat srcImage = imread("1.jpg");
// 【2】显示载入的图片
imshow("【原始图】",srcImage);
// 【3】等待任意按键按下
waitKey(0);
}
二、mfc版本
为了简单,我只给出大体的步骤,具体地细节能贴图尽量贴图,时间紧迫,看官见谅!有问题可以留言!
提前说明的是,在opencv3.0版本下,CvvImage.h CvvImage.cpp 文件是不自带的,一直都想知道opencv3.0版本是如何显示图像的,但是网上给出的思路都是将这两个文件添加到头文件和源文件目录下,如果有网友看到更好的解决办法,可以留言告诉我,另外我给出了我整理好的这两个文件下载地址:
CvvImage.h:http://pan.baidu.com/s/1i3tNIJV
CvvImage.cpp:http://pan.baidu.com/s/1kTBuC4Z
具体步骤如下:
1.创建MFC工程 -- 略过,没有需要说明的
2.将CvvImage.h CvvImage.cpp添加到相应目录下,如图
在解决方案资源管理器中,右键头文件--添加--现有项,找到CvvImage.h
同样的方法添加源文件,不再截图。添加之后,如图。
3.具体实现过程
打开资源视图,设定picture control的属性ID,如图
然后在上图中的原始图像按钮双击,添加事件响应函数,或者右键原始图像按钮添加事件响应函数均可。
具体地代码如下:
在XXDlg.cpp头文件处添加
#include <opencv2\opencv.hpp>
#include <CvvImage.h>
using namespace cv;
原始图像按钮的实现代码:
// 【1】获取图片
srcImage = imread("1.jpg");
//【2】获取IDC_STATIC控件的设备环境,以便对其进行图像操作
CDC* pDCSrc = GetDlgItem(IDC_ShowImgSrc)->GetDC(); //获得显示空间的DC,MFC类一般都是以C开头
HDC hDCSrc = pDCSrc->GetSafeHdc(); //得到hDC句柄进行绘图操作
//【3】将mat格式转换成IplImage格式
IplImage imgsrc = srcImage;
//【4】将IplImage格式转换成CvvImage格式
CvvImage cimgsrc;
cimgsrc.CopyOf(&imgsrc);
//【5】将图像显示到IDC_ShowImgSrc控件上
CRect rectsrc;
GetDlgItem(IDC_ShowImgSrc)->GetClientRect(&rectsrc);
cimgsrc.DrawToHDC(hDCSrc, &rectsrc);
//【6】 释放
ReleaseDC(pDCSrc);
三、小结
图像的显示是最简单的基础,所以不再赘述什么,具体地源代码下载请参考下一章。
这里给出一幅参考处理图像: