我只是在想,在使用JavaCV和C / C ++实现的OpenCV之间,是否会有显着的速度性能优势。
如果我理解得不对,请纠正我,但我认为OpenCV的C / C ++实现更接近机器,而OpenCV的Java实现(JavaCV)则会稍微慢一些(以毫秒为单位),因为有一个虚拟机将您的源代码转换为字节码,然后再转换为机器代码。而使用C / C ++,它直接转换为机器代码,因此不需要经过那个虚拟机开销的中间步骤。
如果我犯了错误,请不要责怪我;我正在学习,并欢迎建设性的批评。
谢谢
我只是在想,在使用JavaCV和C / C ++实现的OpenCV之间,是否会有显着的速度性能优势。
如果我理解得不对,请纠正我,但我认为OpenCV的C / C ++实现更接近机器,而OpenCV的Java实现(JavaCV)则会稍微慢一些(以毫秒为单位),因为有一个虚拟机将您的源代码转换为字节码,然后再转换为机器代码。而使用C / C ++,它直接转换为机器代码,因此不需要经过那个虚拟机开销的中间步骤。
如果我犯了错误,请不要责怪我;我正在学习,并欢迎建设性的批评。
谢谢
JavaCV是其中之一的包装器。因此,在大多数情况下,当您使用JavaCV运行程序时,实际上也在使用OpenCV,只是通过另一种接口调用它。但是,JavaCV提供的不仅仅是对OpenCV进行一对一的包装器。事实上,它捆绑了整个图像处理库,包括FFmpeg、OpenKinect等。(请注意,在C++中,您也可以绑定这些库)。
因此,一般来说,无论您使用OpenCV还是JavaCV,您都将获得几乎相同的性能。它更多地取决于您的主要任务——Java还是C++更适合您的需求。
还有一个关于性能的重要点。使用OpenCV(直接或通过包装器),您有时会发现OpenCV函数比其他实现快几个数量级。这是因为其核心部分大量使用低级别优化。例如,OpenCV的filter2D函数被SIMD加速,因此可以并行处理多组数据。当涉及到计算机视觉时,这些常见函数的优化可能很容易导致显着的加速。