JNI enables Java code to call C or C++ code (and vice versa). OpenCV4Android, Android SDK, and the Java standard libraries all rely on JNI. That is to say, these major Java libraries are partly built atop C++ or C libraries.
OpenCV is largely written in C++. Although the library provides a Java interface (OpenCV4Android) and a Python interface as well, most parts of these interfaces are thin layers atop the C++ implementation. For example, an org.opencv.core.Mat
object (in the Java interface) or a NumPy array (in the Python interface) is backed by a cv::Mat
object (in the C++ implementation), and they share a reference to the same data; there is no duplication of data.
When OpenCV's Java or Python interface forwards a function call to the C++ implementation, it does incur a small overhead cost. If our code makes thousands of OpenCV function calls per frame (for example, one or more calls per pixel per frame), we might begin to worry about this overhead. Typically...