API

Table of Contents

  1. 型および構造体
    1. QrDecoderHandle
    2. QrCodeHeader
  2. コンストラクタ
    1. qr_decoder_open
    2. qr_decoder_open_with_image_size
  3. デストラクタ
    1. qr_decoder_close
  4. バッファ初期化
    1. qr_decoder_set_image_size
    2. qr_decoder_set_image_buffer
  5. バッファ取得
    1. qr_decoder_get_image_buffer
    2. qr_decoder_get_transformed_image_buffer
    3. qr_decoder_get_binarized_image_buffer
    4. qr_decoder_get_tmp_image_buffer
  6. デコード
    1. qr_decoder_decode
    2. qr_decoder_decode_image
  7. デコード済みデータ取得
    1. qr_decoder_get_header
    2. qr_decoder_get_body
  8. デコーダ状態取得
    1. qr_decoder_get_status
    2. qr_decoder_is_busy
  9. バージョン情報
    1. qr_decoder_version
    2. qr_decoder_version_major
    3. qr_decoder_version_minor
    4. qr_decoder_version_teeny
    5. qr_decoder_version_suffix
    6. qr_decoder_version_revision

型および構造体

QrDecoderHandle

typedef void * QrDecoderHandle;

QRデコーダハンドル

QrCodeHeader

typedef struct{
    int model;          // モデル番号
    int version;        // 型番
    int level;          // 誤り訂正レベル
    //int mode;         // 本文モード (未実装)
    //int eci_mode;     // 本文ECIモード (未実装)
    int charactor_size; // 本文文字数
    int byte_size;      // 本文バイト数
} QrCodeHeader;

QRコードヘッダ構造体

コンストラクタ

qr_decoder_open

QrDecoderHandle qr_decoder_open();
  • 引数: なし
  • 戻り値: QRデコーダハンドル

デコーダを初期化する。

qr_decoder_open_with_image_size

QrDecoderHandle qr_decoder_open_with_image_size(
    int width,
    int height,
    int depth,
    int channel
);
  • 引数:
    • int width : 画像バッファの幅(pixel)
    • int height : 画像バッファの高さ(pixel)
    • int depth : 画像バッファのピクセルあたりのbit数
    • int channel : 画像バッファのチャンネル数
  • 戻り値: QRデコーダハンドル

画像バッファの幅,高さ,ピクセルあたりのbit数,チャンネル数を指定してデコーダを初期化する。
ピクセルあたりのbit数はIPL_DEPTH_8UなどOpenCVの定数を指定する。
一般的な24bitフルカラー画像では depth = IPL_DEPTH_8U, channel = 3 と指定する。

入力画像のサイズが既知の場合,バッファサイズを指定してデコーダを初期化することで,バッファ確保にかかるオーバーヘッドを低減できる。

デストラクタ

qr_decoder_close

void qr_decoder_close(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値:なし

デコーダ内の各バッファを破壊し終了処理を行う。

バッファ初期化

Webカメラからの入力など,フォーマットの一定した画像を連続で扱う際に使用する。

qr_decoder_set_image_size

qr_decoder_set_image_size(
    QrDecoderHandle decoder,
    int width,
    int height,
    int depth,
    int channel
);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
    • int width : 画像バッファの幅(pixel)
    • int height : 画像バッファの高さ(pixel)
    • int depth : 画像バッファのピクセルあたりのbit数
    • int channel : 画像バッファのチャンネル数
  • 戻り値: QRデコーダハンドル

デコーダの入力画像バッファの幅,高さ,ピクセルあたりのbit数,チャンネル数を指定する。
qr_decoder_open()で初期化したデコーダのバッファのサイズ指定,およびqr_decoder_open_with_image_size()で初期化したデコーダのバッファサイズの再指定を行う。

qr_decoder_set_image_buffer

QrDecoderHandle qr_decoder_set_image_buffer(
    QrDecoderHandle decoder,
    IplImage *src
);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
    • IplImage *src : 画像バッファへのポインタ
  • 戻り値: QRデコーダハンドル

srcとして指定したIplImage形式の画像バッファをデコーダの画像バッファとする。
指定するバッファはtop-left origin (src->origin==0)で無ければならない。
bottom-left origin (src->origin==1)の場合は,highguiのcvConvertImage()などでtop-left originに変換すること。

IplImageの構造はOpenCVのマニュアルを参照のこと。

バッファ取得

qr_decoder_get_image_buffer

IplImage *qr_decoder_get_image_buffer(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値: IplImage型のバッファへのポインタ

qr_decoder_open_with_image_size(), qr_decoder_set_image_size()およびqr_decoder_set_image()で設定された原画像を格納するバッファのアドレスを取得する。

qr_decoder_get_transformed_image_buffer

IplImage *qr_decoder_get_transformed_image_buffer(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値: IplImage型のバッファへのポインタ

歪み補正済みカラー画像を格納するバッファのアドレスを取得する。(デバッグ用)

qr_decoder_get_binarized_image_buffer

IplImage *qr_decoder_get_binarized_image_buffer(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値: IplImage型のバッファへのポインタ

二値画像を格納するバッファのアドレスを取得する。(デバッグ用)

qr_decoder_get_tmp_image_buffer

IplImage *qr_decoder_get_tmp_image_buffer(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値: IplImage型のバッファへのポインタ

ワークバッファのアドレスを取得する。(デバッグ用)

デコード

qr_decoder_decode

short qr_decoder_decode(
    QrDecoderHandle decoder,
    int adaptive_th_size=DEFAULT_ADAPTIVE_TH_SIZE,
    int adaptive_th_delta=DEFAULT_ADAPTIVE_TH_DELTA
);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
    • int adaptive_th_size : 動的二値化処理ブロックサイズ
    • int adaptive_th_delta : 動的二値化処理差分閾値
  • 戻り値: デコード結果ステータス

初期化済みバッファの内容をデコードする。
adaptive_th_sizeは3以上の奇数または0以下の値を指定すること。
adaptive_th_sizeに0以下の値を指定したときは,adaptive_th_deltaを閾値とする固定二値化処理が行われる。

デコード結果ステータスはqrerror.hで定義された値のうち該当するものをOR処理したものとなる。

ex)

  • デコード成功時: QR_IMAGEREADER_DECODED
  • デコードには成功したが本文に修復不能なエラーが含まれていたとき: QR_IMAGEREADER_DECODED|QR_CODEDATA_UNRECOVERABLE
  • 画像からQRコードを特定できずデコードに失敗したとき: QR_IMAGEREADER_ERROR|QR_IMAGEREADER_NOT_FOUND_FINDER_PATTERN

qr_decoder_decode_image

short qr_decoder_decode_image(
    QrDecoderHandle decoder,
    IplImage *src,
    int adaptive_th_size=DEFAULT_ADAPTIVE_TH_SIZE,
    int adaptive_th_delta=DEFAULT_ADAPTIVE_TH_DELTA
);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
    • IplImage *src : 画像バッファへのポインタ
    • int adaptive_th_size : 動的二値化処理ブロックサイズ
    • int adaptive_th_delta : 動的二値化処理差分閾値
  • 戻り値: デコード結果ステータス。

srcに与えられた画像をデコードする。

srcとして指定したIplImage形式の画像バッファをデコーダの画像バッファとする。
指定するバッファはtop-left origin (src->origin==0)で無ければならない。
bottom-left origin (src->origin==1)の場合は,highguiのcvConvertImage()などでtop-left originに変換すること。

デコード済みデータ取得

qr_decoder_get_header

int qr_decoder_get_header(
    QrDecoderHandle decoder,
    QrCodeHeader *header
);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
    • QrCodeHeader *header : QRコードヘッダ構造体を格納するバッファへのポインタ
  • 戻り値: 失敗時:0,成功時:1

QRコードヘッダ構造体を取得し,headerに指定されたバッファに格納する。

qr_decoder_get_body

int qr_decoder_get_body(
    QrDecoderHandle decoder,
    unsigned char *buf,
    int buf_size
);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
    • unsigned char *buf : QRコード本文を格納するバッファへのポインタ
    • int buf_size : バッファサイズ(byte)
  • 戻り値: 失敗時:0,成功時:格納された本文のbyte数

QRコード本文を取得し,bufに指定されたバッファに格納する。

格納された本文には,その形式に関わらず,終端文字'\0'が追加されない
ただしバッファは事前に0クリアされるので,qr_decoder_get_header()で取得できる本文のbyte数より大きなサイズのバッファを用意することで終端文字のかわりとできる。

デコーダ状態取得

qr_decoder_get_status

short qr_decoder_get_status(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値: ステータスコード

ステータスはqrerror.hで定義された値のうち該当するものをOR処理したものとなる。

qr_decoder_is_busy

int qr_decoder_is_busy(QrDecoderHandle decoder);
  • 引数:
    • QrDecoderHandle decoder : QRデコーダハンドル
  • 戻り値: デコード中:1, アイドル:0

デコード実行中か否かの状態を戻す。

バージョン情報

バージョン情報は "Major.Minor.Teeny Suffix (Revision)" から構成され,Major, Minor, Teenyはリリース時に更新される。
開発中バージョンは,時期リリース予定の"Major.Minor.Teeny"のあとにSuffixとして"-dev"を付加し,開発中バージョン間は Revisionで区別する。

qr_decoder_version

char *qr_decoder_version();
  • 引数: なし
  • 戻り値: バージョン情報 (文字列)へのポインタ

qr_decoder_version_major

int qr_decoder_version_major();
  • 引数: なし
  • 戻り値: メジャーバージョン

qr_decoder_version_minor

int qr_decoder_version_minor();
  • 引数: なし
  • 戻り値: マイナーバージョン

qr_decoder_version_teeny

int qr_decoder_version_teeny();
  • 引数: なし
  • 戻り値: ティニアバージョン

qr_decoder_version_suffix

char *qr_decoder_version_suffix();
  • 引数: なし
  • 戻り値: バージョンサフィックス(文字列)へのポインタ

qr_decoder_version_revision

char *qr_decoder_version_revision();
  • 引数: なし
  • 戻り値: リビジョン情報(文字列)へのポインタ

Last-modified: 2007-02-27