摘要:如何利用OpenCV持久化自己的数据结构?我们来看看OpenCV中的一个例子。MyData.hpp定义自己的数据结构MyData如下:#ifndef MYDATA_HPP#define MYDATA_HPP#include #include #include using namespace std;using namespace cv;class MyData{public: MyData() : A(0), X(0), id() {} explicit MyData(int) : A(97), X(CV_PI), id("mydata1234") // explicit 阅读全文
posted @ 2013-12-28 22:22 阳光守望者 阅读 (1261) 评论 (0) 编辑
摘要:在OpenCV中,采用FileStorage类进行数据持久化,可以采用XML或YAML格式存储数据。将数据写入XML或YAML文件,可采用以下步骤:1、创建FileStorage对象。可以调用构造函数FileStorage::FileStorage(),并传入文件名参数;或者调用默认构造函数,然后调用FileStorage::open()。2、利用重载输出操作符 static inline FileStorage& operator fs; //! structs; //!#include #include #include void writeYAML(){ cv::FileStor 阅读全文
posted @ 2013-12-26 21:00 阳光守望者 阅读 (4931) 评论 (0) 编辑
摘要:主要参考:1、http://www.ozbotz.org/opencv-installation/2、http://www.ozbotz.org/opencv-install-troubleshooting/开发环境:VMware下Ubuntu+OpenCV2.4.7安装过程:The Installation ProcedureTo install and configure OpenCV 2.4.1, complete the following steps. The commands shown in each step can be copy and pasted directly in 阅读全文
posted @ 2013-12-24 21:04 阳光守望者 阅读 (16851) 评论 (2) 编辑
摘要:如果一幅图像的区域中显示的是一种结构纹理或者一个独特的物体,那么这个区域的直方图可以看作一个概率函数,他给的是某个像素属于该纹理或物体的概率。所谓反向投影就是首先计算某一特征的直方图模型,然后使用模型去寻找测试图像中存在的该特征。利用Hue直方图解释反向投影原理:1、获取测试图像中每个像素的hue数据 hi,j,并找到 hi,j在hue直方图中的bin的位置。2、查询hue直方图中对应bin的数值。3、将该数值存储在新的图像中(BackProjection),也可以先归一化hue直方图数值到0-255范围,这样可以直接显示BackProjection图像(单通道图像)。4、通过对测试图像每个像 阅读全文
posted @ 2013-12-19 14:52 阳光守望者 阅读 (12201) 评论 (1) 编辑
摘要:直方图可以用来描述各种不同的事物,如物体的色彩分布、物体边缘梯度模板,以及表示目标位置的当前假设。简单的说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。bin中的数值是从数据中计算出特征的统计量,这些数据可以是诸如梯度、方向、色彩或者任何其他特征。无论如何,直方图获得的是数据分布的统计图。通常直方图的维数要低于原始数据。具体可参见:http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html#histogram-calcul 阅读全文
posted @ 2013-12-06 16:20 阳光守望者 阅读 (4673) 评论 (0) 编辑
摘要:OpenCV的颜色空间转换函数:C++:voidcvtColor(InputArraysrc, OutputArraydst, intcode, intdstCn=0)参数dstCn原来一直沿用CV_BGR2GRAY,CV_RGB2GRAY,CV_GRAY2BGR,CV_GRAY2RGB等格式,但最新几个版本的OpenCV已改为COLOR_BGR2GRAY类似形式,今天才看源代码imgproc.hpp才发现,但官方文档还没修改,如下图,如果程序中使用较新的版本OpenCV,采用CV_BGR2GRAY可能会一直出错。新的OpenCV中imgproc.hpp的定义如下:enum{ COLOR... 阅读全文
posted @ 2013-12-04 14:39 阳光守望者 阅读 (69589) 评论 (3) 编辑
摘要:Image Watch是在VS2012上使用的一款OpenCV工具,能够实时显示图像和矩阵Mat的内容,跟Matlab很像,方便程序调试,相当好用。跟VS2012配合使用,简直就是一款神器!让我一下就爱上它了!第一次看到Image Watch是今年3、4月份的时候,当时是在微博上看到新闻,点击链接的下载页面一直出问题,后面就忘了这事,昨天碰巧在OpenCV主页看到OpenCV2.4.5的Change Logs里面有链接,点进能下载果断试用下啊!闲话少说,先看看部分相关链接。1、Image Watch 的下载链接。2、OpenCV关于Image Watch的介绍页面链接。3、OpenCV2.4. 阅读全文
posted @ 2013-06-28 20:18 阳光守望者 阅读 (23393) 评论 (11) 编辑
摘要:参考《C++ Templates》一书。关于函数模板和类模板,模板参数并不局限于类型,普通值也可以作为模板参数。当要使用基于值的模板时,必须显式地指定这些值,才能够对模板进行实例化,并获得最终代码。详细解释可参考一下代码:stack4.hpp#ifndef _STACK4_H_#define _STACK4_H_#include /*** @class:栈的类模板* @param: typename T: 模板参数,栈存储元素的类型* @param:int MAXSIZE: 栈元素的最大个数* note:模板参数并不局限于类型,普通值也可以作为模板参数*/templatecla... 阅读全文
posted @ 2013-06-26 22:10 阳光守望者 阅读 (3872) 评论 (0) 编辑
摘要:最近买了《C++ Templates》来看,书最开始部分阐述了关于此书的一些编程风格。本人感觉非常好,有些地方之前一直容易搞混,这里却讲述的很清楚。例如:关于下面几种风格的代码:void foo(const int &x);void foo(const int& x);void foo(int const &x);void foo(int const& x);对于上面四种用法,差别虽然不是很大,但是我们更倾向于使用int const,而不是const int。主要原因:1、关于“恒定不变部分”指的是const限定符前面的部分。记住这句话,相信诸如此类:int* 阅读全文
posted @ 2013-06-26 20:30 阳光守望者 阅读 (746) 评论 (0) 编辑
摘要:关于C++对象内存布局的资料和书籍也有很多,比如陈皓老师的博客:1、C++对象的内存布局(上)2、C++对象的内存布局(下)白杨:RTTI、虚函数和虚基类的实现方式、开销分析及使用指导左手为你画猜:C++类对象内存模型与成员函数调用分析(上、中、下)关于讲解C++对象内存模型最好的书应该是侯捷老师翻译的《深度探索C++对象内存模型》。这两天在看其他书籍时,对C++中虚拟继承的实现机制不太理解,于是又重新翻回《深度探索C++对象内存模型》一书,并结合C++对象的内存布局(下)一文。在Visual Studio 2010下用“cl”编译器进行测试,查看虚拟多重继承下的C++对象内存模型。总结如下: 阅读全文
posted @ 2013-05-17 18:10 阳光守望者 阅读 (2335) 评论 (1) 编辑
摘要:本章主要学习下Windows开发中如何使用资源。我们希望Windows开发中除程序代码外还能存储更多的资源,即在.EXE文件中除了代码之外,还包含其他称之为资源的东西。在Windows中预定义了几种资源类型。如图标(.ico)、光标资源(.cur)、字符串、声音(.wav)、位图(.bmp)、对话框、图元文件等。在vs2010中,我们可以在资源文件中添加扩展名为.rc的ASCII文本资源文件作为输入,如下图1。之后VS2010的资源编译器装载所有的资源,并将所有的资源放置在一个具有.res扩展名的大数据文件中,Windows编译及链接时的资源数据流程如图2所示。 图1 ... 阅读全文
posted @ 2013-05-08 22:49 阳光守望者 阅读 (221) 评论 (0) 编辑
摘要:要编写Windows环境下运行的3D游戏,需要先了解基本的Windows应用程序编程思想。一个完整的Windows程序,主要需要完成以下工作:1、创建一个Windows窗口类;2、创建一个事件处理程序,即一个回调函数;3、注册Windows窗口类;4、用创建的Windows窗口类创建一个窗口;5、创建一个能够向事件处理程序传递Windows信息的主事件循环。下面的demo是《Windows游戏编程大师技巧》里的一个基本Windows程序。已经添加了详细的注释,这里就不在赘述。难点主要在Windows消息处理机制,下面这个博客对Windows消息编程有详细的讲解,个人觉得写得很好。Windows 阅读全文
posted @ 2013-05-05 23:40 阳光守望者 阅读 (146) 评论 (0) 编辑
摘要:本人虽然一直从事图形图像方面的研究,但对游戏开发却了解甚少,上周幸运的拿到了网易游戏开发的实习offer,为了不让自己在实习的时候太水,决定在空余时间学习下游戏开发方面的知识。买了本《Windows游戏编程大师技巧》,先依葫芦画瓢做个Demo,程序中游戏的主要逻辑还不太清楚,就当先了解下开发环境和大概的开发流程吧。1、游戏Demo:FreakOut,打砖块游戏2、开发环境:VS2010+XP+DirectX 9.0下载和安装DirectX SDK开发包,在VS2010的属性管理器->VC++目录,配置DirectX SDK的include路径和lib路径,即告诉VS去什么地方寻找Dire 阅读全文
posted @ 2013-04-25 21:08 阳光守望者 阅读 (432) 评论 (0) 编辑
摘要:以前做项目用到OpenCV的库时,习惯把OpenCV目录下lib文件夹中所有的lib文件都添加到工程的依赖库中,当时很傻很天真,一个一个把lib名字复制粘贴过去。现在,OpenCV的库越来越多,老这样做不仅麻烦,而且显得不专业,效率不高。去年年底接触Python之后,赶脚用起来非常方便,但一直还停留在书本上,没用在实际项目中,于是先弄两个小脚本提高下做项目的效率。1、提取Debug版本的OpenCV库文件。 1 import sys 2 import glob 3 import os 4 if len(sys.argv) < 3 : 5 print 'usage: filenma 阅读全文
posted @ 2013-04-03 11:20 阳光守望者 阅读 (606) 评论 (0) 编辑
摘要:OpenCV(计算机视觉库)2.4.4版本已经发布了,OpenCV发展到现在,由最初的C接口变成现在的C++接口,让开发者写程序越来越简单,接口越来越合理,也不用担心内存释放问题。但要理解内部的一些实现机制,还真要费点功夫,这对开发者的C++基础要求越来越高。本文就是笔者在做项目过程中的一点感悟,由C++泛型句柄类思考OpenCV的Ptr模板类的实现。1、C++泛型句柄类我们知道在包含指针成员的类中,需要特别注意类的复制控制,因为复制指针时只复制指针中的地址,而不会复制指针指向的对象。这将导致当两个指针同时指向同一对象时,很可能一个指针删除了一对象,另一指针的用户还认为基础对象仍然存在,此时就 阅读全文
posted @ 2013-03-24 22:44 阳光守望者 阅读 (8349) 评论 (5) 编辑
摘要:以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识。本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会。主成分分析(PCA)是多元统计分析中用来分析数据的一种方法,它是用一种较少数量的特征对样本进行描述以达到降低特征空间维数的方法,它的本质实际上是K-L变换。PCA方法最著名的应用应该是在人脸识别中特征提取及数据维,我们知道输入200*200大小的人脸图像,单单提取它的灰度值作为原始特征,则这个原始特征将达到40000维,这给后面分类器的处理将带来极大的难度。著名的人脸识别Eigenface算法就是采用PCA算法,用一 阅读全文
posted @ 2013-03-20 12:20 阳光守望者 阅读 (25735) 评论 (4) 编辑
摘要:1、将指针封装成一个智能指针类,当其他类需要使用指针时,可用智能指针类代替,将智能指针类对象作为类成员;2、智能指针类作为辅助类,包含了引用计数,当主类的对象进行复制、赋值时,智能指针类中引用计数会相应增加或减少,若计数为0时, 则对对象进行析构;计数不为0时,则不对智能指针类对象进行析构(智能指针类需要动态创建),这样,可以防止出现悬垂指针。下面的代码有助于加强对智能指针的理解。 1 #include <iostream> 2 3 4 //定义仅由HasPtr类使用的U_Ptr类,用于封转使用计数和相关指针 5 class U_Ptr 6 { 7 friend cl... 阅读全文
posted @ 2013-03-01 20:35 阳光守望者 阅读 (1950) 评论 (0) 编辑
摘要:1、字符串转换成整型数C语言库函数:atoi 实现了此功能。int atoi(const char *nptr);函数说明: 参数nptr字符串,如果第一个非空格字符存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。相同功能实现代码如下: 1 /** 2 * 功能:str转int 3 * 注意: 4 * 1、字符串是否为空; 5 * 2、非法输入如何处理; 6 * 3、溢出判断; 7 * 4、输入字符串只有“+”或“-”号时; 8 * 5、如何转换:从字符串中输入一个个字符进行处... 阅读全文
posted @ 2013-02-21 19:50 阳光守望者 阅读 (14121) 评论 (0) 编辑
摘要:最近在看《程序员的自我修养》,颇有体会,故化繁为简,整理书中部分内容,作为学习笔记。PC平台上流行的可执行文件格式主要是windows下的PE(Portable Executable)和Linux下的ELF(Executable Linkable Format),他们都是COFF(common file format)格式的变种。可执行文件(windows下.exe和Linux下的ELF可执行文件)、动态链接库(DLL,Dynamic Linking Library)(windows下的.dll和Linux下的.so)、静态链接库(Static Linking Library)(windows 阅读全文
posted @ 2013-01-28 21:46 阳光守望者 阅读 (3722) 评论 (2) 编辑
摘要:通过一个实例稍微深入理解C++复制控制过程,参考资料《C++ primer》,介绍点基本知识:1、在C++中类通过特殊的成员函数:复制构造函数、赋值操作符和析构函数来控制复制、赋值和撤销该类的对象时会发生什么。2、复制构造函数(copy constructor)是一种特殊的构造函数,具有单个形参,该形参(常用const)是对该类类型的引用;当定义一个新对象并用一个同类型的对象对它进行初始化时,将显示使用复制构造函数;当将该类的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。3、复制构造函数可用于:根据另一个同类型的对象显示或隐式初始化一个对象;复制一个对象,将它作为实参传给一 阅读全文
posted @ 2012-11-02 10:37 阳光守望者 阅读 (2289) 评论 (0) 编辑