欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-12 13:12:06
...
用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很好。主要的好处是它的支持库太多了。对于开发原型产品,理解算法是非常有帮助的。
相关标签: opencv python