OPENCV学习笔记3-3_单件模式

  OPENCV  单件是另外一种流行的设计模式,用于简化对一个类实例的访问,同时保证在程序的执行期间只有一个实例存在。下面使用单件来访问一个控制器对象。将前面的ColorDetectController类修改,以包含一个单件类。

//要做第一件事是添加一个私有类的静态成员变量,它将保存对单个类实例的引用。同时,为了禁止创建额外的//类实例,构造函数也是私有的。
class ColorDetectController {
    private:
        //单件指针
static ColorDetectController *singleton; // pointer to the singleton
        ColorDetector *cdetect;

        // private constructor  私有构造函
ColorDetectController() {
//setting up the application 初始化工作
cdetect= new ColorDetector();
        }

//此外还可以使复制构造函数和操作符私有化,以确保无法创建独一无二的单件实例拷贝。当以个用户的类要求//单件类的一个实例,才可以被创建它通过一个静态的方法实现,如果实例不存在那么创建,然后返回一个指向//该实例指针
//访问单件实例
static ColorDetectController *getInstance() {
if (singleton == 0)
    singleton= new ColorDetectController;
return singleton;
}
//需要注意,单件的实现并不是线程安全的,因此在多线程情况下不适用它
//最后,因为单件实例是被动态创建的,当用户不使用时要输出它,也是通过一个静态函数来实现
static void destroy() {
if (singleton != 0) {
    delete singleton;
    singleton= 0;
    }
}
//由于单件是一个静态成员变量,必须在.CPP文件中定义
#include "colorDetectController.h"
ColorDetectController *ColorDetectController::singleton=0;

//因为,单件可以通过一个公共静态方法获取,所有包含单件类声明的类都能访问它,尤其适用控制器对象,它//被多个拥有复杂GUI的窗口控件类访问。其他任何一个类都不需要声明一个成员变量,对话框的两个回调方法//编写如下
void onopen()
{
    //......
    ColorDetectController::getInstance()->setInputImage(filename);    //指针
}
void onclose()
{
    //......
    // Releases the Singleton
    ColorDetectController::getInstance()->destroy();
}
时间: 2024-08-28 06:51:29

OPENCV学习笔记3-3_单件模式的相关文章

OpenCV学习笔记[3]Java Demo人脸识别

OpenCV学习笔记:Java Demo人脸识别 [简介] 我记得在很久以前,CSDN似乎搞过一个活动,给一个橘子林的照片,让程序计算相片里有多少个橘子.之所以对这个问题记忆犹新,是因为在专业学习初期,相比于排序遍历搜索等简单算法而言,"图像识别"算法一直是难以理解的东西,而我偏偏又痴迷于此,不管自己多么无知,对于令我迷惑的问题总是充满着解决的渴望. 通过对OpenCV的初步了解,我发现图像识别的很多问题都可以用它方便的解决,本次将是一个来自官方的人脸识别的实例,我们提供图像,使用内置

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s

OpenCV学习笔记(01)我的第一个OpenCV程序(环境配置)

昨天刚刚考完编译原理,私心想着可以做一些与考试无关的东西了.一直想做和图像处理相关的东西,趁这段时间有空学习一下OpenCV,搭建环境真是一件麻烦的事情,搞了近三个小时终于OK了.先来张图: 大致描述一下步骤吧: 一.安装前准备 1.VS2012(网上看到很多用的VS2010,但是基本不影响) 2.OpenCV 安装包(我下载的是最新的2.4.9) 二.安装OpenCV 1.解压OPenCV 说是安装,其实就是解压,OpenCV的Windows安装程序就是一个自解压程序: 这里我解压到C:\Pr

opencv学习笔记(03)——遍历图像(迭代器法)

1 #include <opencv2\highgui\highgui.hpp> 2 #include <opencv2\imgproc\imgproc.hpp> 3 #include <opencv2\core\core.hpp> 4 5 void colorReduce(cv::Mat& img, int div=64); 6 7 8 int main() 9 { 10 cv::Mat img_orginal = cv::imread("F:\\i

OpenCV 学习笔记(模板匹配)

OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够高时,就认为找到了我们的目标. 在 OpenCV 中,提供了相应的函数完成这个操作. matchTemplate 函数:在模板和输入图像之间寻找匹配,获得匹配结果图像 minMaxLoc 函数:在给定的矩阵中寻找最大和最小值,并给出它们的位置 在具体介绍这两个函数之前呢,我们还要介绍一个概念,就是如何来评价两

openCV学习笔记(2)--cvCreateTrackbar

int cvCreateTrackbar( const char* trackbar_name, //滑动条的名称 const char* window_name, //窗口的名称,滑动条不会遮挡图像 int* value, //当滑动条被拖到时,OpenCV会自动将当前位置所代表的值传给指针指向的整数 int count, //滑动条所能达到的最大值 CvTrackbarCallback on_change //可选的回调函数,回调函数可参见http://wapedia.mobi/zhtrad

OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2013-03-23 17:44 16963人阅读 评论(28) 收藏 举报 分类: 机器视觉(34) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] KAZE系列笔记: OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 OpenCV学习笔记(28)KA

OpenCV学习笔记[5]FLANN特征匹配

OpenCV学习笔记:FLANN特征匹配 本次给出FLANN特征匹配的Java实现. [简介] 特征匹配记录下目标图像与待匹配图像的特征点(KeyPoint),并根据特征点集合构造特征量(descriptor),对这个特征量进行比较.筛选,最终得到一个匹配点的映射集合.我们也可以根据这个集合的大小来衡量两幅图片的匹配程度. 特征匹配与模板匹配不同,由于是计算特征点集合的相关度,转置操作对匹配影响不大,但它容易受到失真.缩放的影响. [特征匹配] FeatureMatching.java: imp

概率图模型(PGM)学习笔记(三)模式推断与概率图流

我们依然使用"学生网络"作为例子,如图1. 图1 首先给出因果推断(Causal Reasoning)的直觉解释. 可以算出来 即学生获得好的推荐信的概率大约是0.5. 但如果我们知道了学生的智商比较低,那么拿到好推荐信的概率就下降了: 进一步,如果又同时知道了考试的难度很低,那么他拿到好的推荐信得概率又上升了,甚至还能超过最初的概率: 上述这个过程就是因果推断,你看它是顺着箭头的方向进行推断. 其次给出信度推断(Evidential Reasoning)的直觉解释.如图2. 图2 本