Image、Audio 及 Video Extenders 管理與程式設計

範例 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);
}


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]