融入设计模式思想的C教学,借助opencv(一)

     融入设计模式思想的C教学,借助opencv(一)

     

      记录一下C教学,以供学弟学妹们参考和下载相关代码。转载请注明出处。之所以结合opencv是我最近在学习它,不了解的同学知道它是一个强大的图像处理库就好了。


     考虑到大家已经有c语言的基础,基础的数据类型,循环,判断不再讲解。这次课主要讲解c的结构体和共用体还有枚举体。偏向于应用,语法细节这里不再列出。  水平有限,有错误或者不合理之处还请大家指正。


      结构体类似于高级语言中的列表,用于存储相同或不同类型但存在紧密联系的数据。对结构体的合理应用不仅使程序逻辑清晰,还易于扩展,我们这里以设计模式的思想来指导c编程,虽然它原本多用于面向对象编程,我最近在接触,觉得它同样可用于指导c编程。设计模式(c++实现)请参考:http://blog.csdn.net/column/details/design.html


我们来假设一个情境,在这个情境下来开始我们的程序设计。 假设某纺织工厂刚成立,它生产纯色的布料(比如白色,红色,蓝色.......),它接受客户的需求参数有:布料id, 颜色, 高度,宽带。(实际上可能有更多的参数)。我们来设计这样一个工厂生产“布料”,这里的布料指的是纯色的图片(计算机上嘛,用图片模拟)。比如下面的图片。 我们暂且称这个公司为母公司,后来随着发展它又派生出一个子公司,它可以在布料上按用户要求加工图案,比如提供一张猫的图案,在布料上加上这一图案。我们所要设计的程序应当要是易扩展的,所谓易扩展即随着需求变化我们原有的代码不必有大的改动,易于增添新功能。

  

对于母公司,我们可以设计一个生产函数它接受用户提供的参数返回一张图片,而这个参数组我们可以用结构体来设计,以结构图为参数送入生产函数。这样做的好处是,扩展时我们很容易利用已有的代码,在这个结构体当中天添加参数也非常容易,而不致影响原来的功能。例如参数结构体可以设计如下:(具体的代码实现如果不懂先不必关注,重点关注结构体的应用)

struct parrent_company  //最初母公司只生产布料
{

   std::string id;
   enum color clothColor;
   int width;
   int height;

};


 
而生产函数形式为: 

/*母公司生产纯的布料,实际程序生产各色图片,存储为id.jpg*/
cv::Mat  produce_pure_clothes(struct parrent_company clothParams);

而后发展出子公司的时候,我们可以利用母公司的结果,子公司多增添了图案这一参数,相应的结构体为:

struct child_company  //发展出子公司,在布料上加工图案
{

   struct parrent_company cloth;
   enum pattern clothPattern;

};

而生产函数只需在母公司生产出的布料的基础上加工图案即可。生产过程为:用户提供规格信息,给定图案;工厂查看母公司有没有相关规格的布料,没有则要求其生产;在布料上加工图案。

例如生产结果为:





请大家仔细体会结构体在这里的应用。具体的细节我会在讨论的时候和大家讲。学弟学妹不必关心具体的实现,如有兴趣请了解opencv及其配置。同时我是在qt-creator下创建的工程,(类似于你们的VC6),可参见我的博客:

http://blog.csdn.net/lihaoweicsdn/article/details/48274411


下面贴出代码:(可以在我的网盘下载:http://pan.baidu.com/s/1c04okVm

再次说明,学弟学妹不必拘泥于代码细节,主要要领会应用思想。

共用体

       下面介绍共用体,共用体顾名思义,共享内存。特别适合当程序当中有大量临时变量时。同时也用来检测CPU是大端序的还是小端序。这里给大家出一个思考题,即如何编程实现检测CPU是大端序还是小端序,请给出多种解决方法。  共用体的细节性的,讨论时再讲解。

      就写到这吧,也当是记录一下。有疑问在群里或见面问我。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值