#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. IO Streams:扫描

    简介 Scanner类被用于输入的格式化中断,并将其移到Tokens中,然后对其单个的Tokens根据其数据类型进行翻译. 从input--Tokens 默认情况下,一个Scanner使用 空格 键去 ...

  2. Java接口抽象类

    抽象类中的方法可以实现,接口中的方法只能声明,不能实现.抽象类的成员变量可以为各种类型,接口的变量只能为public static final.抽象类可以有静态方法和静态代码块,接口不能有.一个类只能 ...

  3. 【Luogu】P2765魔术球问题(没看懂的乱搞)

    题目链接 这题……讲道理我没看懂. 不过我看懂题解的代码是在干嘛了qwq 题解是zhaoyifan的题解 然后……我来讲讲这个题解好了. 题解把值为i的球拆成了两个,一个编号是i*2,一个编号是i*2 ...

  4. matlab 中的删除文件

    Matlab中有两种删除文件的方式: 一种是删除文件     delete()函数      //可以使用help  delete命令查询delete()函数的使用方法 delete('p1.jpg' ...

  5. 第一个 spring Boot 应用通过Docker 来实现构建、运行、发布

    1. Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙 ...

  6. bzoj 2797 [Poi2012]Squarks 枚举一个,推出所有

    题目大意 设有n个互不相同的正整数{X1,X2,...Xn},任取两个Xi,Xj(i≠j),能算出Xi+Xj. 现在所有取法共n*(n-1)/2个和,要你求出X1,X2,...Xn. 输出所有满足条件 ...

  7. java并发框架Executor介绍

    Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...

  8. 【CF1025C】Plasticine zebra(模拟)

    题意: n<=1e5 思路:可以证明答案即为极长交替出现的串长度之和 需要注意其实这个串是一个环,复制后再做 #include<cstdio> #include<cstring ...

  9. 【CF1023A】Single Wildcard Pattern Matching(模拟)

    题意:给定两个串s与t,其中s可能有至多一个通配符*可以被当做任意长度与内容的串,问t能否与s匹配 n,m<=2e5 思路: #include<cstdio> #include< ...

  10. 标准C程序设计七---41

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...