I believed that OpenVX is a specification which defines a basis on how to create reusable algorithms (through so called Kernels) and link them together in a graph manner.
That would make sense. However, why does it contain (even in headers) concrete algorithms. In computer vision there are countless algorithms. Why is a insignificant subset of them part of a specification itself.
Shouldn’t the framework be decoupled from it’s plugins (that’s how I understand Kernels - they are plugins into OpenVX)?
If I implement my custom kernel then how do I distribute it such that users can use it in their graphs?
I will partially answer to myself. Just found out that there is a function vxLoadKernels. Shouldn’t the “Base Vision Functions” be packed into BaseVisionFunctions.so module which would be loaded by the vxLoadKernels? What is the point for these functions to be built in the spec?
They are intended to be part of the spec so that the results of the operations can be rigorously defined and checked by the conformance test. Otherwise you have the same problem as OpenCV. If 2 implementations on 2 separate hardware vendors differ by 20% (for “optimization” reasons), no one can do anything about it. Here we can do something. Their use the logo can be revoked, and they can’t call it compliant anymore.