源程序下载地址:http://download.youkuaiyun.com/detail/bright_geek/8157859
改变也没有想象的那么难,如果你用心,每天进步一点点,用你下决心那一刻的心理状态严格规范自己的日常行为,我想定会遇到更好的自己。曾经看过一个故事,古时候,一位耳顺之年的老婆婆要去看望家住三十公里外的女儿,她徒步走了一天终于到了。女儿对此很感动也很惊讶,这么远的距离,你徒步是怎么来的。母亲答道:你有孕在身,无人照料,我是一定要来照顾你的。路途中,每当我想到距离太远而绝望时,我就告诉自己只要走好当下的这一小步,只要到达下一个拐角,我就成功了。从这个小故事中我们可以看到:成功=强烈的信念+坚持到底的行动!而行动往往是一项长期而艰巨的过程。故事中的老婆婆将一个大的目标,分割成一系列小目标,然后逐个击破,每完成一个小任务都更接近大目标,而且自己也更有动力,也更加坚定信念!联想到编程,我们将一个大的任务分割成若干模块(函数),相似的小任务,我们运用循环或迭代的思想来完成。而我现在要做的就是写好这篇学习总结!
道虽弥,不行不至。事虽小,不为不成。一点小感触,共勉!
上篇博客实现了一个简单的小程序,这篇博客我们将对上一篇内容做一个梳理与知识补充,然后加入新功能:在图像控件显示的图片上画矩形作为感兴趣区域。细节知识点还是在代码注释中呈现,在编码的过程中知其所以然。
1.准备工作
1.1界面
界面和(一)中基本一样,只是我们少了显示路径的编辑控件,如下图:
1.2外部文件
我们要在项目中添加dirent.h和CvvImage.h和CvvImage.cpp等文件,这里我想多说句。这里的添加不是仅仅把这三个文件添加到项目路径、代码开头include即可,而是在
solution中添加Existing Item,将相应的头文件加入到Header Files,源文件加入到Source Files中,如下图。笔者犯了这样的错误,编译时出现外部链接错误,上网搜索时,发现有不少人在问这个问题,后来才发现是忘了在solution中添加。。。
2.代码实现
2.1添加新类ImageInfo用于存储每个图片信息
{...
public:
IplImage* m_pCurImage;
IplImage* m_pCurImageCopy;
char* m_pFileName;//图像名字
char* m_pDirName;//图像所在文件夹名字
CvRect* m_pROIs;
int m_ROICounter;
//到构造函数初始化
IplImage* m_pCurImage;
IplImage* m_pCurImageCopy;
char* m_pFileName;//图像名字
char* m_pDirName;//图像所在文件夹名字
CvRect* m_pROIs;
int m_ROICounter;
//到构造函数初始化
}
2.2头文件声明
在Dlg头文件中添加如下声明:
public:
//显示选择文件夹窗口
CString m_Path;//存储浏览路径
char* m_ImageDir;//指向浏览到的路径
//读取所有图像相关变量
DIR * m_pDir;//头文件要包含#include "dirent.h"
struct dirent *m_pEnt;//dirent 存储目录中的文件信息(文件名、扩展名等等)
//获取图像控件绘制句柄:定义变量m_HDCPicCtl指向图像控件绘制句柄,m_RectPicCtl标记控件客户区域
HDC m_HDCPicCtl;
CRect m_RectPicCtl;
void getNextImage();//获取下一个文件名字
void showImage();//获取图片集的dir后负责显示一副图像
CvRect m_pCurRect;
CvvImage m_CvvImage;
bool m_LButtonDownFlag;//标记鼠标点击
bool m_MouseMoveFlag;//标记鼠标移动
char* pJpg;
char* pBmp;
char* m_ImageDir;//指向浏览到的路径
//读取所有图像相关变量
DIR * m_pDir;//头文件要包含#include "dirent.h"
struct dirent *m_pEnt;//dirent 存储目录中的文件信息(文件名、扩展名等等)
//获取图像控件绘制句柄:定义变量m_HDCPicCtl指向图像控件绘制句柄,m_RectPicCtl标记控件客户区域
HDC m_HDCPicCtl;
CRect m_RectPicCtl;
void getNextImage();//获取下一个文件名字
void showImage();//获取图片集的dir后负责显示一副图像
CvRect m_pCurRect;
CvvImage m_CvvImage;
bool m_LButtonDownFlag;//标记鼠标点击
bool m_MouseMoveFlag;//标记鼠标移动
char* pJpg;
char* pBmp;