#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. POJ 2021 Relative Relatives

    Relative Relatives Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3339   Accepted: 146 ...

  2. 在Ubuntu中,用mvn打包hadoop源代码时报错,正在解决中!!!

    报错信息如下: (各种配置在最后面) hadoop@administrator-virtual-machine:~/Downloads/tar/hadoop-3.0.0-alpha1-src$ mvn ...

  3. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 …… 接着他们发现自己收 ...

  4. BZOJ-3040 最短路

    最短路+堆优化. 普通的堆还不行,自己用的是配对堆(貌似斐波那契堆也行?毕竟理论复杂度) 然后发现自己的配对堆比云神的不知快了多少...我照着他的模版打的喂.. 然后发现前T条边不理都能A... 数据 ...

  5. hud 4746 莫比乌斯反演

    Mophues Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327670/327670 K (Java/Others)Total S ...

  6. JAVA特性面试题:

    1.简要介绍java程序的健壮性. 答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏. 2.为什 ...

  7. 更改 terminal 開啟時,預設的路徑

    echo "cd /media" >> ~/.bashrc open a new terminal (ctrl + alt + t)

  8. 升级 GCC 支持C++11 或 configure: error: *** A compiler with support for C++11 language features is required.

    configure: error: *** A compiler with support for C++11 language features is required. 参考链接: (1)升级 G ...

  9. hdu 4632 子字符串统计的区间dp

    题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...

  10. AC日记——Super Mario hdu 4417

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...