OpenCV

Ph.Leroy

2015-04-26

La librairie OpenCV permet de réaliser de nombreux traitements d'image et de s'interfacer à des équipements d'acquisition vidéo de manière portable.

Cette librairie est trés puissante et mérite de pouvoir être appellée depuis sisal, cette page montre comment enregistrer des images dans une base de données de production.

La librairie opencv.sch décrit cinq types d'objets, ils sont tous préfixés par cv pour garder une certaine cohérence.

Tpe d'objet Fonction
cvCapture Equipement physique d'acquisition d'image
cvImage Une image capturée par un équipement et/ou pouvant être modifiée
cvWindow Fenêtre de visualisation de données
cvMatrice Matrice permettant de représenter des tableaux de valeurs en particulier de pixels
cvVector Vecteur de données élémentaires

Le script serveur va acquérir une image à chaque événement, par exemple le test d'un produit manufacturé, mais ici toutes les secondes.

Include "opencv.sch";
Use test;

Var cpt;
cap cvCapture; // La camera
img as cvImage; // Une image sur laquelle on travaille
m1 cvMatrice;
m2 cvMatrice;

monimage; // Variable sisal contenant une image

Server( _APPLICATION_)
Var i;
begin

   On do begin
      cap.openCam( 0); // Initialisation, ouverture de la camera 0
   end

   On horloge.ToutesLesSecondes do begin
      img = cap.retrieve(); // Acquisition d'une image openCV
      m1.set( img);
      m2 = m1.cvtColor( CV_BGR2RGB); // Traitment d'image -> Conversion de BGR en RGB
      setimage( monimage, m2.cols, m2.rows, m2.data); // Transfert dans une variable sisal

      Prods.new();  // Creation d'un enregistrement dans la base de traçabilité
      Prods.WriteImage( Prods.photo, monimage); // Association de l'image du produit
      Prods.Add();  // Enregistrement du produit
   end
end

L'exploitation peut se faire ainsi dans un synoptique:

Object
il ImageList,"Default.png",...;
...
Function AfficheImage( x)
begin
   if x >= 0 and x < prods.records() then begin
      prods.read( x);
      if prods.ReadImage( prods.photo, image) then begin
         il.image = image;
      end else il.image = defimage;
   end
end

C'est pas plus compliqué que cela.