c++设计模式之模板方法模式 学习笔记

模板方法模式原理相对比较简单,理解上也不存在困难。实际上就是把固定的(步骤)流程封装起来,然后通过改变每一个具体步骤来实现不同功能。

举个栗子。【因为最近在学习机器视觉(准备入坑),那就以传统的图像处理步骤为例来讲述模板方法模式。】
比如说:我现在进行图像处理,需要从图像中获取我想要得到的信息。那么,拿到一张图片后的处理可以分为三个基本流程(顺序执行):图像预处理,特征提取,特征分析。

对于产品A来说:图像预处理需要进行高斯去噪;特征提取需要进行canny边缘提取;特征分析需要对提取的边缘长度和夹角进行判断分析。

对于产品B来说:图像预处理需要进行均值去噪;特征提取需要进行OTSU阈值提取;特征分析需要对提取的区域面积和中心点进行判断分析。

对于产品C来说:图像预处理需要进行中值去噪;特征提取需要进行LBP纹理提取;特征分析需要对提取的特征按照要求进行判断分类。

以上述为例,直接上代码。

#include<iostream>

class VisionInspection
{
protected:
	virtual void imagePreprocessing() = 0;
	virtual void imageFeatureExtract() = 0;
	virtual void iamgeFeatureAnalysis() = 0;
public:
	void imageProcessing()
	{
		imagePreprocessing();
		imageFeatureExtract();
		iamgeFeatureAnalysis();
	}
};
class InspectProductA:public VisionInspection
{
protected:
	virtual void imagePreprocessing()
	{
		std::cout << "首先,对图像进行高斯去噪" << std::endl;
	}
	virtual void imageFeatureExtract()
	{
		std::cout << "然后,通过canny算法提取目标边缘" << std::endl;
	}
	virtual void iamgeFeatureAnalysis()
	{
		std::cout << "最后,分析提取的目标边缘直线的长度和夹角,得出结果" << std::endl;
	}
};
class InspectProductB :public VisionInspection
{
protected:
	virtual void imagePreprocessing()
	{
		std::cout << "首先,对图像进行均值去噪" << std::endl;
	}
	virtual void imageFeatureExtract()
	{
		std::cout << "然后,通过OTSU算法对目标进行二值化阈值提取" << std::endl;
	}
	virtual void iamgeFeatureAnalysis()
	{
		std::cout << "最后,分析提取的目标的面积和中心点,得出结果" << std::endl;
	}
};
class InspectProductC :public VisionInspection
{
protected:
	virtual void imagePreprocessing()
	{
		std::cout << "首先,对图像进行中值去噪" << std::endl;
	}
	virtual void imageFeatureExtract()
	{
		std::cout << "然后,对图像进行LBP纹理特征提取" << std::endl;
	}
	virtual void iamgeFeatureAnalysis()
	{
		std::cout << "最后,分析目标的LBP纹理特征,得出结果" << std::endl;
	}
};
void main()
{
	VisionInspection *make_inspection1 = new InspectProductA();
	make_inspection1->imageProcessing();

	VisionInspection *make_inspection2 = new InspectProductB();
	make_inspection2->imageProcessing();

	VisionInspection *make_inspection3 = new InspectProductC();
	make_inspection3->imageProcessing();

	delete make_inspection1;
	delete make_inspection2;
	delete make_inspection3;

	system("pause");
	return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值