Index
Introduction
Conception
d'un plugin
PnPluginAppName
PnPluginInfo
PnPluginFunction
PnPluginDialog
Conseils de
design
Exemples de
projets
pluginExemple2.dll
v0.3.0
PluginPoster.dll
v0.4.0
pluginLUT.dll
v0.4.0
PluginContours.dll
v0.3.0
PluginFocus.dll
v0.3.0
Contribuer
Introduction
Il est possible de compléter le choix des
fonctions de traitement d'image prévues dans PortaNum
à l'aide de fonctions supplémentaires, les
"plugins", que le logiciel incorpore dans ses menus.
Ce document comporte deux parties: la
première
Plugins pour PortaNum -
utilisateur
est destinée à l'utilisateur,
qui trouvera des fonctions supplémentaires à
ajouter à son logiciel, selon ses besoins. Cette seconde
partie, destinée aux programmeurs, donne des informations
sur la façon de concevoir ses propres plugins, ainsi que des
exemples de projets.
Conception d'un plugin
Cette section s'adresse aux programmeurs qui
souhaitent concevoir leurs propres plugins.
La documentation détaillée est
téléchargeable ci-dessous
documentation
du plugin Portanum
Une dll utilisable avec PortaNum doit comporter au
moins les fonctions suivantes:
PnPluginAppName
Cette fonction doit retourner la chaîne de
caractères "PortaNum" (maj. ou minuscules
indifféremment),
afin de vérifier que la dll est bien destinée
à l'application PortaNum
PNPLUGIN_API const char* PnPluginAppName( void ) { //version; const char * appName; appName = "PortaNum"; return appName; }
PnPluginInfo
Cette fonction retourne dans une structure comportant
plusieurs champs de strings, un certain nombre d'informations qui
seront intégrées dans le programme PortaNum.
typedef struct { const char * version; const char * param; const char * funcName; const char * hint } plInfo;
PNPLUGIN_API int PnPluginInfo(plInfo * pInfo ) { if (pInfo) { *pInfo = Info; return 0; } else return 1; }
- version est le numéro de version de la
dll (sous la forme d'un string "0.3.0"
- param est le nom du paramètre de
réglage (ex: "seuil"), ou de la grandeur de sortie ex:
"focus". param peut être une chaîne vide.
- funcName est le nom de la fonction, tel qu'il
apparaît dans le menu "Traitements"
- hint est un texte court d'explication du
rôle de la fonction
PnPluginFunction
Cette fonction effectue le traitement
demandé. Elle utilise les définitions de la
librairie Intel Ipp.
Il n'est pas nécessaire d'utiliser cette librairie. Il faut
alors inclure les déclarations de types suivantes:
typedef unsigned char Ipp8u; typedef struct { int width; int height; } IppiSize;
typedef enum { ippStsErr = -2, /* (erreur) erreur non spécifiée */ ippStsNoErr = 0, /* (OK) pas d'erreur*/ } IppStatus;
Le paramètre mode (valeur par
défaut 0) permet de prévoir des variantes de la
fonction. Il est utile en particulier pour les phases de test, mais
peut être exploité en usage normal, si PortaNum
gère l'accès à ce
paramètre.
Si la valeur de mode est –1, on utilise le mode
défini en interne par la page de configuration, si elle
existe. Sinon, c'est le mode 0 qui est appelé.
Le paramètre coef (valeur par défaut 50, plage de
0 à 100) permet à l'utilisateur de
gérer de manière interactive l'amplitude de
l'effet réalisé. Selon les cas, il sera actif ou
non.
PNPLUGIN_API IppStatus PnPluginFunction( Ipp8u* pSrc, int srcStep, Ipp8u* pDst, int dstStep, IppiSize roiSize, int mode, int coef ) { IppStatus status = 0; // 0 = no error Ipp8u * pS = pSrc; Ipp8u * pD = pDst; int w, iy, ix;
// function implementation ... // votre code …
return status; }
Le code de retour, de type IppStatus, utilise la
spécification ipp (voir codes d'erreur dans ippdefs.h)
D'une manière générale, un code
négatif signale une erreur, un code nul signale que
l'opération s'est déroulée
corrrectement, un code positif signale un avertissement.
Par défaut, on utilisera seulement les deux codes suivants :
ippStsErr = -2, /* (erreur) erreur non spécifiée */ ippStsNoErr = 0, /* (OK) pas d'erreur*/
on pourra utiliser une valeur entière
positive comme code de retour (par exemple pour des plugins
réalisant des calculs sur des images, comme le plugin
"Focus".
PnPluginDialog
Cette fonction appelle une page de dialogue. Cette
page, facultative, peut être simplement utilisée
pour afficher une fenêtre "à propos", ou une aide
simplifiée. Elle peut être le point
d'entrée d'une interface plus complexe, permettant par
exemple le choix et la sauvegarde de différents
paramètres de configuration.
PNPLUGIN_API IppStatus PnPluginDialog(HINSTANCE hInstance, HWND hwnd) { // votre code ici }
Conseils de design
Il est recommandé de
veiller à la complexité de l'algorithme, et
à son codage, afin qu'il n'entraîne pas un temps
d'exécution incompatible avec la vidéo temps
réel
Il existe un moyen simple de vérifier le
temps d'exécution d'un traitement: faire
Préférences/Options Expert/ Les pages de
propriétés du programme s'affichent. Choisir
l'onglet Paramètres généraux, et
cocher l'onglet Affichage Barre d'état. Il
apparaît en bas de la fenêtre une zone qui indique
le temps d'affichage (comparer plein écran et
écran fenêtré), le temps
d'exécution du traitement, et la cadence vidéo en
nombre d'images par seconde. Le temps d'exécution
dépend bien sûr de la puissance de votre machine
et de la taille d'image. Ces informations sont disponibles en
sélectionnant Aide/Info Systeme.
Prévoir des
mécanismes de traitement des erreurs pour que la fonction de
traitement ne bloque jamais le programme.
On utilisera, par exemple les mécanismes
try - catch
Utiliser des librairies de
traitement d'image
La librairie Intel/IPP comporte une
implémentation très efficace des fonctions de
base en traitement d'image. Elle tire parti des possibilités
du processeur de la machine sur laquelle s'exécute le
programme. Nous l'avons utilisée dans les traitements de
base de Portanum.
La librairie OpenCV comporte un grand nombre de
fonctions de Vision par Ordinateur. Elle est utilisée dans
certains des projets ci-dessous.
Exemples de projets
Vous trouverez ci-dessous le code source de quelques
projets de plugins.
Selon les cas, les projets ont
été réalisés sous Microsoft
Visual C++ 6.0, ou sous Microsoft Visual C++ .net
pluginExemple2.dll v0.3.0
Ce plugin très simple effectue le passage
en négatif d'une partie de l'image. Il comporte une page de
configuration, et utilise le paramètre de réglage.
télécharger
le source
PluginPoster.dll v0.4.0
Ce plugin produit un effet de postérisation
par réduction du nombre de couleurs dans l'image.
- réglage de l'effet: joue sur le nombre de
couleurs retenues
- page de configuration
- possibilité de filtrage passe-bas
télécharger
le source
pluginLUT.dll v0.4.0
Ce plugin effectue la transformation de la luminance
de l'image à l'aide d'une LUT couleur. Il comporte une page
de configuration, utilise le paramètre de
réglage, et sauvegarde l'option choisie dans le fichier
portanum.ini
télécharger
le source
PluginContours.dll v0.3.0
Ce plugin utilise la librairie OpenCV. Il fait partie
de l'installation d'origine de PortaNum. Il comporte les aspects
suivants:
- superposition des contours à l'image
d'origine
- page de configuration
- réglage du seuil de détection
des contours
- choix de la couleur des contours
- possibilité de filtrage passe-bas de
l'image d'origine
- possibilité d'affichage des contours seuls
- sauvegarde des options
télécharger
le source
PluginFocus.dll v0.3.0
Ce plugin est également installé
par défaut avec PortaNum. Il apporte une aide au
réglage de la mise au point d'une caméra ou
webcam, en fournissant un indicateur de mise au point.
télécharger
le source
Contribuer
Si vous souhaitez partager l'une de vos
créations (source ou dll), merci de nous l'adresser, avec un
petit texte de présentation, afin que nous puissions en
faire profiter les utilisateurs.
|
|
copyright
THALES - 10-Nov-2008 |
|