Leptonica
高度な画像処理のための C API
オープンソースの C ライブラリにより、開発者は独自のアプリ内で画像のスケーリング、変換、回転、せん断などの高度な画像処理操作を実行できます。
Leptonica はオープン ソースの C 画像処理および画像解析ライブラリで、ドキュメント画像や自然画像の操作に非常に役立ちます。このライブラリは非常に安定しており、JPEG、PNG、TIFF、WebP、JP2、BMP、PNM、PS、GIF、PDF などの多数の画像形式をサポートしています。提供されているイメージ形式のリストに対して、読み取りおよび書き込み操作を簡単に実行できます。このライブラリは主に、オブジェクト指向のアプローチと、コードを安全、移植可能、透過的にする一連の設計原則を使用していました。
このライブラリは、いくつかの重要な操作のサポートと、画像処理および画像解析のための一連のツールを提供します。このライブラリは、画像のスケーリング、変換、回転、せん断、ピクセル深度の変更による画像変換、バイナリおよびグレースケールの形態、ピクセルワイズ マスキング、ブレンディング、強調、算術演算などの操作をサポートします。また、pixa、boxa、pta、および その他。
また、複数の画像を含むファイルの読み取りと書き込み、およびヘッダーに特殊な TIFF タグが埋め込まれたファイルの書き込み機能も提供しています。また、開発者は、PDF への変換、ラスター イメージ、PostScript ファイルの一連の圧縮イメージへの変換など、さまざまな形式で PostScript ファイルを作成することもできます。
レプトニカを始めよう
Leptonica をインストールする最も簡単な方法は、GitHub 経由で使用することです。スムーズなインストールのために次のコマンドを使用してください
GitHub から Leptonica をインストールします。
git clone --depth=1 https://github.com/mrdoob/three.js.git
イメージの読み取りと書き込み
オープン ソース ライブラリの Leptonica は、ソフトウェア開発者が独自のアプリケーション内でイメージを読み書きできるようにします。画像データを読み書きするための低レベルおよび高レベルの関数、複数の画像を含むファイルを読み書きするための関数、ヘッダーに埋め込まれた TIFF タグを含むファイル、JPEG ファイルの読み取りなど、画像を読み書きするためのいくつかの重要なメソッドを提供しています。 、PostScript ファイルの読み取りと書き込み、およびその他のいくつかの関数。ライブラリでサポートされている特定のエンコーダーもいくつかあります。
Leptonica Libraryで画像を読む
// Open input image with leptonica library
Pix *image = pixRead("/usr/src/tesseract-3.02/phototest.tif");
api->SetImage(image);
// Get OCR result
char *outText;
outText = api->GetUTF8Text();
C ライブラリによる画像スケーリング
オープン ソース ライブラリの Leptonica は、独自の C アプリケーション内でイメージを簡単にスケーリングするための完全なサポートを提供しています。線形補間を使用したアップスケーリング、サブサンプリングを使用したダウンスケーリング、またはエリア マッピングによるダウンスケーリング、サンプリング、2x および 4x 線形補間アップスケーリング、RGB からグレーまたはバイナリへの整数サブサンプリングなど、Leptonica によって提供される多数のスケーリング関数があります。それとは別に、バイナリ イメージの非常に高速なスケーリングも提供され、スキャンされたバイナリ テキストのイメージ分析に役立ちます。
C ライブラリによる画像回転の改善
オープン ソース ライブラリの Leptonica は、独自の C アプリケーション内で画像を回転するためのサポートを提供しています。せん断による回転、領域マッピングによる回転、90 度、180 度、または 270 度の特別な回転、2 度または 3 度のせん断による回転など、画像の回転操作を実現する方法は多数あります。
Cの図書館による180度のイメージの回転
extra = w & 31;
if (extra)
shift = 32 - extra;
else
shift = 0;
if (shift)
rasteropHipLow(datas, w, h, d, wpls, 0, h, shift);
databpl = (w + 7) / 8;
bpl = 4 * wpls;
for (i = 0; i < h; i++) {
lines = datas + (h - 1 - i) * wpls;
lined = datad + i * wpld;
for (j = 0; j < databpl; j++) {
if (val = GET_DATA_BYTE(lines, bpl - 1 - j))
SET_DATA_BYTE(lined, j, tab[val]);
}
}
if (shift)
rasteropHipLow(datas, w, h, d, wpls, 0, h, -shift);