opencv库C版和C++版的函数和变量命名差异分析

最初,opencv库是用C语言开发的,内存管理复杂,各种类型的强制转化(因为memorystorge不知道里面存的是什么东西),还有就是面向对象结构,各种函数名错综复杂,数据与操作关联不够密切,所以C++版本应运而生,C++大部分只是重新封装了C的内容,但是函数名不一样了,但是与之前又有一定的联系。

首先说整体的命名变化:C++无论是变量还是函数名都没有了Cv/cv开头。

其次说变量:C版本都是‘’Cv‘’开头,后面接变量单词的完整形式或部分形式,如CvPoint和CvRect,也有多个词汇组成的类型,比如CvPoint3D32f和CvMatND,到了C++版本,直接去掉“Cv”就行了。但是少有的像CvPoint3D32f进行了更进一步的精简从而改为了Point3f。

最后是说函数,C版本里面的函数均以“cv”开头,后面连接着表达函数意思的单个或多个单词的 完整表达或部分表达,如cvCirclle(),cvAbsDiff(),cvDiv(),cvCrossProduct(), 由于C++引入了面向对象的思想,所以C里面的函数到了C++去了三个地方:常规函数、类成员函数和重载为普通的符号函数如“加减乘除等”,但是无论去了哪里,首先是去掉“cv”,然后分两种情况:

(1)、函数名除“cv”外的部分由一个单词的完成表达或部分表达构成时,都是直接去掉“cv”就是,如cvCircle()变为circle(),cvMin()改为min()。

(2)、函数名除“cv”外的部分由一个以上的单词的完整表达或部分表达构成,仍然直接去掉“cv”,如果紧接着的单词部分的第一个单词是完整的单词,则将该单词小写就行了,后面的不变,如cvMeanShift()改变为meanShift();如果紧接着的单词部分的第一个单词是单词的一部分,则该单词部分仍将保持首字母大写,后面的不变,如cvCamShift(),由于Cam的完整表达应该是camera,所以要大写,从而改变为CamShift()。

最后补充一点,C版本里面好多函数要开辟内存,如cvCreateMemStorage()这样的操作,到了C++,这部分参数都可以省略了。

但是,说了这么多,也不是所有情况都是这样,,比如C版本里面的cvLoadImage(),到了C++版本了面却不是loadImage(),而是imread(),这是少之又少的情况,我的猜测应该是图片的载入和保存使用的频率太高,以至于需要高度精简,不仅字母数量减少,连大小写切换也省了,所以没有使用loadImage(),而是imread(),另一个是cvSaveImage()改为imwrite()。所以,这只是当你在需要替换函数的时候能够为你提供这样的思路去找到对应的函数,毕竟C版本使用起来不那么人性化。

最后最后,一定不要忘记了重载的事情,很多函数意思可以用简单符号表达,那么它十有八九就是重载为符号了。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值