#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. iOS键盘高度的获取

    代码如下: - (void)viewDidLoad { [super viewDidLoad]; //增加监听,当键盘出现或改变时收出消息 [[NSNotificationCenter default ...

  2. FZU——2111Min Number(多次交换得到最小数,水题)

    Problem 2111 Min Number Accept: 760    Submit: 1516 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  3. 刷题总结——生日礼物(bzoj1293单调队列)

    题目: Description 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠, ...

  4. java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?

    在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...

  5. 百万级日活 App 的屏幕录制功能是如何实现的

    Android 从 4.0 开始就提供了手机录屏方法,但是需要 root 权限,比较麻烦不容易实现.但是从 5.0 开始,系统提供给了 App 录制屏幕的一系列方法,不需要 root 权限,只需要用户 ...

  6. Java面试进阶部分集合

    框架基础 反射:反射是Java开发的一类动态相关机制.因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念. 怎么表达反射? 能用反射做什么? PS:某 ...

  7. Opus 和 AAC 声音编码格式

    Opus编码器 是一个有损声音编码的格式,由互联网工程任务组(IETF)近来开发,适用于网络上的实时声音传输,标准格式为RFC 6716.Opus 格式是一个开放格式,使用上没有任何专利或限制. Op ...

  8. 什么是GOP(转)

    所谓GOP,意思是画面组,MPEG格中的帧序列,分为I.P.B三种,如排成IBBPBBPBBPBBPBBP...样式,这种连续的帧图片组合即为GOP(画面群,GROUP OF PICTURE),是MP ...

  9. React项目的打包与部署到腾讯云

    腾讯云送了30天的免费试用,于是有了把react项目部署到上面的想法.项目是默认生成的,只是一个页面,但是这个过程中也遇到了不少麻烦与问题.下面来具体梳理下: create-react-app 来自F ...

  10. [Inside HotSpot] UseParallelGC和UseParallelOldGC的区别

    JVM的很多参数命名很有迷惑性,-XX:+UseParallel,-XX:+UseParallelOldGC,-XX:+UseParNewGC,-XX:+UseConcMarkSweepGC咋一看容易 ...