#include<opencv2\core\core.hpp>

#include<opencv2\imgproc\imgproc.hpp>

#include<opencv2\highgui\highgui.hpp>

#include<iostream>





using namespace std;

using namespace cv;









class ColorDetector

{

public:

ColorDetector():minDist(100)

{

target[0]=target[1]=target[0]=0;

};

void setColorDistanceThreshold(int distance)

{

if(distance<0)

distance=0;

minDist=distance;

};

int getColorDistanceThreshold() const

{

return minDist;

};

void setTargetColor(unsigned char red,

                   unsigned char green,

unsigned char blue)

{

target[0]=blue;

target[1]=green;

target[2]=red;

};

void setTargetColor(cv::Vec3b color)

{

target=color;

};

cv::Vec3b getTargetColor() const

{

return target;

};

int getDistance(const cv::Vec3b& color) const

{

return abs(color[0]-target[0])+abs(color[1]-target[1])+abs(color[2]-target[2]);

};

cv::Mat process(const cv::Mat &image);//核心算法。在类外实现

private:

int minDist;

cv::Vec3b target;

cv::Mat result;

};

cv::Mat ColorDetector::process(const cv::Mat &image)

{

result.create(image.rows,image.cols,CV_8U);

cv::Mat_<cv::Vec3b>::const_iterator it=image.begin<cv::Vec3b>();

cv::Mat_<cv::Vec3b>::const_iterator itend=image.end<cv::Vec3b>();

cv::Mat_<uchar>::iterator itout=result.begin<uchar>();

for(;it!=itend;++it,++itout)

{

if(getDistance(*it)<minDist)

{

*itout=255;

}

else

{

*itout=0;

}

}

return result;

}

class ColorDetectController//控制器

{

private:

ColorDetector *cdetect;

cv::Mat image;

cv::Mat result;

public:

ColorDetectController()

{

cdetect=new ColorDetector();

};

void setColorDistanceThreshold(int distance)

{

cdetect->setColorDistanceThreshold(distance);

};

int getColorDistanceThreshold() const

{

return cdetect->getColorDistanceThreshold();

};

void setTargetColor(unsigned char red,unsigned char green,unsigned char blue)

{

cdetect->setTargetColor(red,green,blue);

};

void getTargetColor(unsigned char &red,unsigned char &green,unsigned char &blue)const

{

cv::Vec3b color=cdetect->getTargetColor();

red=color[2];

green=color[1];

blue=color[0];

};

bool setInputImage(std::string filename)

{

image=cv::imread(filename);

if(!image.data)

return false;

else

return true;

};

const cv::Mat getInputImage()const

{

return image;

};

void process()

{

result=cdetect->process(image);

};

const cv::Mat getLastResult() const

{

return result;

};

~ColorDetectController()

{

delete cdetect;

};

}

Controller//控制器的更多相关文章

  1. .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  2. .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  3. MVC(Model(模型) View(视图) Controller(控制器))

    复习 1.      商品表 增删改查 index.php  add.php   view.php   edit.php   action.php 2.      MVC(Model(模型)  Vie ...

  4. 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  5. 二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  6. loadrunner入门篇-Controller控制器

    Controller组件是LR的控制中心,主要包括场景设计和场景执行两部分.在VuGen中编辑完脚本并将脚本加载到Controller组件中,即开始对脚本运行时的场景进行设计,当场景设计完成后,即可执 ...

  7. MVC中Controller控制器相关技术

    第6章Controller相关技术 Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并 且负责协调Model与View之间的数椐传递,是ASP.NET MV ...

  8. springMVC源码--Controller控制器

    springMVC给我们提供Controller控制器,用来实现我们的逻辑处理,在Controller接口中定义的方法也是比较简单的,如下: Controller接口及实现类:

  9. NET/ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  10. ci框架根据配置自动生成controller控制器和model控制器(改版本)

    CI修改如下: if($modle_file=config_item('modle_file')) { if ($modle_file === TRUE) { $modle_file=config_i ...

随机推荐

  1. 【bzoj3166】[Heoi2013]Alo 可持久化Trie树+STL-set

    题目描述 Welcome to ALO ( Arithmetic and Logistic Online).这是一个VR MMORPG ,如名字所见,到处充满了数学的谜题.现在你拥有n颗宝石,每颗宝石 ...

  2. hihoCoder #1072 辅导

    题意 $\DeclareMathOperator{\lcm}{lcm}$选 $k$ ($k\le 10$) 个 $1$ 到 $n$($n\le 10^9$)之间的整数(可以相同),使得 $\lcm(a ...

  3. [LOJ#113]最大异或和

    [LOJ#113]最大异或和 试题描述 这是一道模板题. 给由 n 个数组成的一个可重集 S,求一个集合 T⊆S,使 T1 xor T2 xor … xor T|T| 最大 输入 第一行一个数 n.第 ...

  4. BZOJ3098 Hash Killer II 【概率】

    挺有意思的一题 就是卡一个\(hash\) 我们先取L大概几十保证结果会超出\(10^9 + 7\) 然后就随机输出\(10^5\)个字符 由题目的提示我们可以想到,如果我们有\(n\)个数,选\(k ...

  5. 区间合并 POJ3667+HDU4553

    两道题都是线段树的区间合并 lsum, rsum分别表示左/右端点 开始向右/左 符合条件的元素的最长连续长度 sum表示这个区间的符合条件的元素的最长连续长度 所以pushUp可写: void pu ...

  6. 【BZOJ3524】Couriers(主席树)

    题意:给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. n,m≤5000 ...

  7. 【CF707B】Bakery(想法题)

    题意: 有N个城市,M条无向边,其中有K个城市是仓库 现在要在非仓库的城市中选择一家开面包店,使得其最少与一个仓库联通,且到所有仓库距离的最小值最小 (1 ≤ n, m ≤ 10^5, 0 ≤ k ≤ ...

  8. net4:MultiView(view)行为中的commmandname与commmandargument,ListBox的使用及移动操作

    原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  9. css3 背景图动画一

    一 实现背景图循环播放 @keyframes mlfly { 0%{ background-position:0 0; } 100%{ background-position:210px 0; } } ...

  10. javascript 函数重载另一种实现办法

    最近在读javascript忍者 感受下jquery作者 john Resig对于js的独到见解. 先上代码: function addMethod(object,name,fn){ var old ...