GenICam, или, точнее, GenAPI обрабатывает только перечисление, объединение (между различными поставщиками), представление функций камеры, реализующих GenICam.
GenTL, с другой стороны, абстрагирует транспортный интерфейс и предоставляет стандартизированный набор функции для пользователя.
Итак, если вы хотите работать с функциями камеры (GenAPI), вам сначала нужно поработать с реализацией транспортного уровня для сканирования камер и связи с ними.
Быть частью стандарта означает, что транспортный уровень (GenTL), по крайней мере, предоставляет функции, перечисленные в GenTL.h
, но обычно намного больше. Более того, провайдеры GenTL - как вы правильно сказали - обычно это общие библиотеки, предоставляемые производителем, обычно с суффиксом .cti
.
. Они могут быть динамически загружены и затем использовать функции. Вот пример использования провайдера Basler GenTL:
#include <GenTL.h>
#include <dlfcn.h>
#include <dirent.h>
int main(){
// Load DLL at runtime
void *lib = dlopen("/opt/pylon/lib/pylonCXP/bin/ProducerCXP.cti", RTLD_NOW | RTLD_DEEPBIND);
// Declare variables with variable definitions from GenTL.h
GenTL::PGCInitLib GCInitLib;
GenTL::PGCCloseLib GCCloseLib;
// Dynamically bind GenTL functions to local function calls
*reinterpret_cast<void**>(&GCInitLib) = dlsym(lib, "GCInitLib");
*reinterpret_cast<void**>(&GCCloseLib) = dlsym(lib, "GCCloseLib");
GCInitLib(); // Init GenTL provider
// [Discover cameras, open port, load GenICam, do things]
GCCloseLib();
}
Затем его можно скомпилировать с помощью
g++ -l ldl main.cpp -o TestGenTL