イメージ、オーディオ、およびビデオ・エクステンダー 管理およびプログラミングの手引き

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


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]