用c++和python开发opencv程序比较?

用c++和python开发opencv程序有什么区别?大家做个比较吧!——————————以下由刘铲铲提问——————————用c++和python开发opencv,1.哪个更容易上手?2.代码运行的效率差距大吗?3.两个语言对应的opencv的库有不同吗?4.对于非程序员的研究人员,想要开发一个视觉产品,选用哪个比较好?回复内容:
我的毕业设计就是用opencv 2写的,前期使用c++写了个demo,最后的成品是用python 2写的。两者主要的区别在于接口和效率。实际上python和c++的opencv接口几乎一样,不同的是用c++的话,矩阵用的是cv::mat,python里面用的是numpy.array,用法和接口都不一样,但文档丰富,使用也非常方便,原理也相似。效率方面,python的接口实际上只是一层binding,最终还是调用libopencv_*.so里面的函数,所以在opencv这一层效率与c++是完全一致的。唯一不同的就是它的numpy.array和cv::mat。numpy底层也是使用c extension的方法写,但相比c++版的opencv接口,python的接口需要把numpy的数据转化成opencv的c接口可接受的输入。实测python写的程序会慢,但具体慢多少并没有测试数据可支撑。用python写实际上也不会比c++开发快多少,因为接口都是一样的,我建议不如直接用c++写。我后面选python实际上只是想试一下python接口而已。
1.一个尿性,库本身的差别并不大。2.因为都是调的库,差别仍旧不大。说用numpy.array的,并不是唯一选择,实际上仍然有mat类,你也可以直接使用,并不一定要用numpy.array。坦白说,从效率来看,因为numpy有numba神器,有可能比cv.mat更快。然而限制所在在于gil以及非库运算中的速度限制。例如你非要写几个for循环而不愿意用array/mat的相关函数算符,慢一点也是没办法的。由于gil的存在,opencv在py上跑单个进程就被控在单核里了,多线程基本上没啥用,提高效率往往要多进程,手法娴熟可能效率差距不大,太生僻有可能写出慢十几倍多玩意来。3. 库其实是一样的pyopencv只是一层封装而已。4. python写着快但是其实坑很多。如果你说的「产品」是生产环境下工作的,而你自身对python的了解又不够深入,那么选择c++会更好。如果你很了解python了,或者说主要做快速成型验证想法之类的活儿,python有着写起来省时省力的优势,毕竟动态类型提供的方便足够多,熟悉的话不会踩坑/不在意踩坑的话自然是怎么方便怎么来。
简单说两句,选python还是c++,考虑下面几个问题1. 性能压力在哪里?python的gil使得多线程不能多核并行,必须用多进程,而且天生python要比c++慢一些。因此如果是cpu密集型,建议用c++,如果是io密集型,python没有那么大的劣势。2. 开发成本高还是运行成本高,一个开发人员一个月多少钱,一个服务器一个月多少钱,通常来说前者越来越贵而后者反之,权衡下利弊,c++开发要比python慢,在性能都达标的情况下,如果节省的服务器成本能抵过开发成本,用c++,反之用python。
一般都是python做实验、调试什么的,定型后就用c++写了
1,差不多,基本调用参数都一样,格式符合各自语言规范。2,在我开发的程序中python比cpp明显有差距,但是换到工作用的电脑上这个差距就看不错来了,so,硬件配置好一些,用python做实时也是没有问题的。外,感觉同样的函数python就是比cpp慢一些,虽然上面说到python底层用的也是lib。3,基本一样。(python可能功能稍微差一点2.4.8版本有个函数没在python中找到,但是也就那一个)4,python比较简单,开发可能快一点(主要是软件的其他部分可能比较容易开发)。
我觉得python很好。主要的好处是它的支持库太多了。对于开发原型产品,理解算法是非常有帮助的。

Posted in 未分类

发表评论