写一手好的C++代码 ,利用Strategy模式写的
来源:互联网 发布:有源码怎么做网站 编辑:程序博客网 时间:2024/05/17 02:19
<span style="font-size:32px;">策略设计模式就是将算法封装在类中,比如我们见到的进行一个二值化算法;</span>
#include <opencv2/core/core.hpp>#include<opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>using namespace cv;using namespace std;class ColorDetector{ private: int minDist; Vec3b target; Mat result; public: ColorDetector():minDist(100){ target[0] = target[1] = target[2] = 0; } //设置色彩距离阈值 void setColorDistanceThreshold(int distance){ if (distance < 0) distance = 0; minDist = distance; } //get set方法设置Private里面的变量 int getColorDistanceThreshold()const{ return minDist; } //设置需检测的颜色 void setTargetColor(unsigned char red, unsigned char green, unsigned char blue){ target[2] = red; target[1] = green; target[0] = blue; } void setTargetColor(Vec3b color){ target = color; } Vec3b getTargetColor()const{ return target; } //计算与目标颜色的距离,采用的是街区距离 int getDistance(const Vec3b& color) const{ return abs(color[0] - target[0]) + abs(color[1] - target[1]) + abs(color[2] - target[2]); } Mat ColorDetector::process(const Mat &image){ result.create(image.rows,image.cols, CV_8U); Mat_<Vec3b>::const_iterator it = image.begin<Vec3b>(); Mat_<Vec3b>::const_iterator itend = image.end<Vec3b>(); Mat_<uchar>::iterator itout = result.begin<uchar>(); for (; it != itend; ++it, ++itout){ if (getDistance(*it) < minDist){ *itout = 255; } else{ *itout = 0; } } return result; }};int main(){ //创建对象 ColorDetector cdector; Mat image = imread("boldt.jpg"); if (!image.data){ return 0; } cdector.setTargetColor(130, 190, 230); namedWindow("result"); imshow("result", cdector.process(image)); waitKey(0); return 0;}
0 0
- 写一手好的C++代码 ,利用Strategy模式写的
- 如何写一手好代码
- 写得一手好代码,先学会设计模式
- SEO五日谈四:写一手好的行业文章
- 写一手漂亮的 JavaScript
- 【代码积累】写一手漂亮的代码(1)
- 国际:写一手容易理解的代码是否很重要?
- 如何写一手漂亮的 Vue
- 写刚刚好的代码
- 会写代码和写好代码的区别
- 吟的一手好诗
- 写代码的感觉好爽
- 写好代码的十个秘决
- 程序员的基本原则 /如何写好代码
- 程序员的基本原则 /如何写好代码
- 写好代码的五个要素
- 写好代码的五个要素
- 写好代码的10个秘密
- MAT基础知识
- IOS常用的设计模式以及对应的优势
- java/excel上传,解析,导入数据库
- mysql备份策略的制定
- 内存泄露之排查篇
- 写一手好的C++代码 ,利用Strategy模式写的
- Packet for query is too large (41477246 > 167772). 数据库写入数据过大
- 贪心法实现无向图的划分
- 设置DOS系统时间
- 数据库运行监控
- 线程同步的三种方案
- RSync实现文件备份同步
- Jquery Table 的基本操作
- 常用调试方法小结