IBM Books

Image Extender、Audio Extender 和 Video Extender 管理和程序设计

示例 2:按内容搜索图象

广告发布代理的图形演示者正在为客户开发新的印刷广告。 该演示者想在广告的背景中使用特定形状的蓝色, 并想在代理创建印刷广告之前查看是否已使用了该颜色。要那样做, 图形演示者运行按内容搜索图象的应用程序。这些图象存储在数据库表中(参见图 1)。该应用程序要求用户提供可视示例,即,表明感兴趣的颜色的图象。该应用程序然后分析示例中的颜色, 并查找其颜色与示例最匹配的图象。

下图显示了可视示例和检索到的与其颜色最匹配的图象。

图 4. 按内容搜索图象


REQTEXT

下例显示应用程序的一些关键元素。注:应用程序使用名为 QbQueryCreate 的 QBIC API 来创建 QBIC 查询, 使用 QbQueryAddFeatureQbQuerySetFeatureData 来将颜色选择添加至查询, 使用 QbQuerySearch 来发出查询, 并使用 QbQueryDelete 来删除查询。应用程序还使用名为 DBiBrowse 的图形 API 来显示检索到的图象。

图 5. 按内容搜索图象的应用程序

#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);
}


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]