#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 2195 最小费用最大流模板

    /*Source Code Problem: 2195 User: HEU_daoguang Memory: 1172K Time: 94MS Language: G++ Result: Accept ...

  2. DS博客作业06—图

    1.本周学习总结 1.1思维导图 1.2学习体会 2.PTA实验作业 2.1 图着色问题 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色, ...

  3. WebSocket & websockets

    WebSocket & websockets https://en.wikipedia.org/wiki/WebSocket https://developer.mozilla.org/en- ...

  4. [SCOI2011]糖果 (差分约束)

    题目链接 Solution 差分约束乱搞就好了. 需要注意的地方: 对于大于等于的直接联等于,应为等于,因为对于我满足条件而言,等于总是最好的. 对于等于的,注意要建双向边. 然后要开 \(long~ ...

  5. log4j配置输出到数据库+自定义字段

    Log4j.properties配置 log4j.rootLogger = info,stdout,D,E,A3 log4j.appender.Threshold=info ### 控制台输出### ...

  6. Codevs 3287 货车运输 == 洛谷P1967

    3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 n 座城市,编 ...

  7. 【POJ3352】Road Construction(边双联通分量)

    题意:给一个无向图,问最少添加多少条边后能使整个图变成双连通分量. 思路:双连通分量缩点,缩点后给度为1的分量两两之间连边,要连(ans+1) div 2条 low[u]即为u所在的分量编号,flag ...

  8. canvas之webgl的浏览器开启方式

    引自百度知道的回答 1.开启方式: 第一种:打开cmd,切换到Chorme的安装目录,敲入chrome.exe --enable -webgl,回车就会打开一个chrome浏览器窗口: 第二种:找到C ...

  9. linux信号-------初涉

    一.信号的本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是进程 ...

  10. 表格 td中,取checkbox后几位值

    function addToPanDianDetail() { var detail_id = ""; var detail_code = ""; $(&quo ...