// クラスタの角度推定計算 void mcalcangle(CLUSTER* pcluster,double& angle,int fusionflag = 1); 入力 CLUSTER* pcluster; クラスタ(mgetvalidclusterで取得したクラスタ) int fusionflag; 通常指定する必要はない。 1プリミティブ=1文字(英語大文字、数字、カンマ等) が保証されている場合は0にすると精度が向上する デフォルト値は1 出力 double& angle; 推定角度(ラジアン)区画線のベクタライズ
// mvectorizeline関数の呼び出して、ベクタライズを実行する // デフォルトはベクタライズ無しとなっているため、区画線を利用する場合は、この関数を1回はコールする // 重複して、何度も呼んでもOK void menablevectorize(); // mvectorizeline関数の呼び出して、ベクタライズを実行しない // 角度推定においても、区画線の情報は用いない // 重複して、何度も呼んでもOK void mdisablevectorize(); // 区画線のベクタライズ int mvectorizeline(); 返り値 0...正常終了(mdisablevectorizeでベクタライズを実行しない場合を含む) 負...エラーサンプルコード
#include "ocrdef.h" #include "ocrco.h" #include "cjocrprimrd.h" #include "errcode.h" ... .... // ライセンサーから供給される20桁のコードあるいはライセンスコードファイルのパスを指定して、ライブラリを初期化 CJocrPrimRD* pjocrprim = new CJocrPrimRD("ABCDEFGHJKLMNPQ23456"); // ライセンスコードパスの場合はCJocrPrim* prim = new CJocrPrim("C:\\Program Files\\Foo\\primitive.kcd"); pjocrprim->msetdocument(mdata,0,mwidth,mheight); // 背景が0前景が1のモノクロ画像 pjocrprm->msetdpi(400); ret = pjocrprim->makeprim(); if(ret < 0) { エラー; } /////////////////////// // 区画線のベクタライズ pjocrprim->menablevectorize(); ret = pjocrprim->mvectorizeline(); if(ret < 0) { エラー; } // クラスタの抽出(クラスタに属するプリミティブはレイヤ1へ移動) ret = pjocrprim->mabstractcluster(0,1); if(ret < 0) { エラー; } // クラスタ数の取得 int clusternum = pjocrprim->mgetvalidclusternum(); CLUSTER* pcluster = (CLUSTER*)malloc(sizeof(CLUSTER) * clusternum); if(pcluster) { // クラスタの取得 mgetvalidcluster(pcluster); for(int i = 0 ; i < clusternum ; i++) { double angle; // 角度推定の際に、区画線の情報が用いられる pjocrprim->mcalcangle(pcluster + i,angle); // angleが推定された角度(ラジアン) // 実際のベースラインの角度はangleかangle+π/2 .... ... } } delete pjocrprim; ...