Extensions Image, Audio et Vidéo Administration et programmation

Exemple 2 : Recherche d'images en fonction de leur contenu

Un graphiste participe à la création d'une nouvelle affiche publicitaire pour un client. Il souhaite utiliser en arrière-plan une tonalité de bleu spécifique, et veut savoir si cette couleur a déjà été utilisée pour des réalisations précédentes. Pour cela, il exécute une application permettant d'effectuer des recherches portant sur le contenu d'images. Les images sont stockées dans une table de base de données (voir Figure 1). Le graphiste est invité à indiquer un échantillon visuel, c'est-à-dire une image représentant la couleur recherchée. L'application analyse alors la couleur choisie et recherche les images dont la couleur s'en rapproche le plus.

La La figure ci-après illustre la fenêtre d'interrogation dans laquelle apparaît l'échantillon visuel et les résultats de la recherche, qui regroupent les images répondant le mieux au critère indiqué.

Figure 4. Recherche d'images en fonction de leur contenu


REQTEXT

La L'exemple ci-après illustre certains éléments essentiels de l'application utilisée. Cette dernière fait appel à une API QBIC appelée QbQueryCreate pour la création d'une requête QBIC, aux API QbQueryAddFeature et QbQuerySetFeatureData pour l'ajout de la couleur sélectionnée à la requête, à l'API QbQuerySearch pour le lancement de la requête, et à l'API QbQueryDelete pour sa suppression. L'application utilise également une API graphique, appelée DBiBrowse, pour l'affichage des images extraites.

Figure 5. Application permettant de rechercher des images en fonction de leur contenu

#include <dmbqbqpi.h>
 
#define MaxQueryReturns  10
 
static SQLHENV henv;
static SQLHDBC hdbc;
static SQLHSTMT hstmt;
static SQLRETURN rc;
 
void main(int argc, char* argv[])
{
 char           line[4000];
 char*          handles[MaxQueryReturns];
 QbQueryHandle  qHandle=0;
 QbResult       results[MaxQueryReturns];
 SQLINTEGER     count;
 SQLINTEGER     resultType=qbiArray;
 
 SQlAllocEnv(&henv);
 SQLAllocConnect(henv, &hdbc);
 rc = SQLConnect(hdbc, (SQLCHAR*)"qtest", SQL_NTS,
              (SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS);
 
 if (argc !=2) {
 printf("usage: query colorname\n");
          exit(1);
 }
 
 QbImageSource is;
 is.type = qbiSource_AverageColor;
 
 /* run the get color subroutine */
 getColor(argv[1], is.average.Color);
 
 QbQueryCreate(&qhandle);
 QbQueryAddFeature(qhandle, "QbColorFeatureClass");
 QbQuerySetFeatureData(qhandle, "QbColorFeatureClass",&is);
 QbQuerySearch(qhandle, "ADS", "ADS_IMAGE", 10, 0, resultType
                            &count, results);
 for (int j = 0; j <count; j++) {
 printf(j,":\n");
 
 DBiBrowse("usr/local/bin/xv %s", MMDB_PLAY_HANDLE, handles[j],
                MMDB_PLAY_WAIT);
 }
 
QbQueryDelete(qhandle);
 
 SQLDisconnect(hdbc);
 SQLFreeConnect(hdbc);
 SQLFreeEnv(henv);
}


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]