2012-03-31 1 views
1

私はカメラを使って写真を撮る機能を実装しました。私はいくつかの簡単な画像処理(非常に単純なOCR - 主にそのようなタスクを処理するために自分自身の能力を試してみたい)をしたいのですが、画像データを変換する必要があります public void onPictureTaken(byte [] imageData、Camera c) グレースケール-2dバイト配列に変換します。 私が見つけた唯一のコードサンプルは、bitmapFactory(Image Processing on Android)を使用してイメージをビットマップに変換することでした。 私の質問です - 誰かがすべての生フォーマットについてアドバイスし、それらからデータを抽出する方法はありますか?または、おそらく私の最高の推測ビットマップを取得し、2dバイト配列にスケール?onPictureTakenでraw imageDataを操作する

トピックのリンクは非常に高く評価されています。

http://sourceforge.net/projects/javaocr/

を...ともAndroid上でOCRを作業:我々はクッキーを持っている -

+0

あなたは 'onPictureTaken'使用する必要があるか、プレビューコールバック、' onPreviewFrame'を使用することができますか? –

+0

これは、プレビュー中にイメージを処理する必要はありません。渡されるパラメータの違いは何ですか? – Vitaly

+1

'onPictureTaken'はJPGイメージを渡し、' onPreviewFrame'は生のYUVデータを渡します。 –

答えて

1

私はこの回答が少し遅れたことを認識していますが、カメラで作業している間に過去1ヶ月で学んだことがあります。あなたはonPictureTakenまたはを経由して生の画像データを受信機かどうか

onPreviewFrameそれはsereral異なるフォーマット(android.graphics.ImageFormat)でエンコードされてくることができます。ユニバーサルサポートが保証されている唯一のものはNV21で、YV12はハニカムから普遍的にサポートされています。普遍的にサポートされていることに加えて、NV21は、あなたがやろうとしていること(黒と白に変換)に非常によく合うかもしれません。 NV21はYUVフォーマットで、Yチャネルは輝度情報を、UチャネルとVチャネルは色情報を伝送します。あるとしてRGB変換(非常に効率的ではありません>

http://en.wikipedia.org/wiki/YUV
http://www.fourcc.org/fccyvrgb.php
http://www.fourcc.org/yuv.php#NV21

ウィキリンクNV21-を実現するサンプルソースを持っていますが、良いアイデアを与える:ここより正式な説明は参照してください。一般的方法)。この変換をCやアセンブリで行うことに興味があれば、これは情報の良い出典でした(警告:NV21用のコードはありません。それにもかかわらず、.Sファイルをndkプロジェクトに組み込む方法を示しています。実際には簡単です。 B/Wへの変換 - 戻るあなたの質問に

http://www.roman10.net/effective-color-conversion-yuv-rgb-in-android-in-assembly/

。単にYチャンネルを取り、RGBトリプルを[Y、Y、Y]として作成すると、白黒画像が得られます。または、L8イメージを単純に作成することもできます(例:Y→L)。

PS。 RGBへの変換中にYUV値の範囲/スケーリングに関して混乱が大きくなります。カメラのデータがフルスイング(0-255、16-235または16-240ではなく)で、マトリックス乗算後の結果を0-255に固定すると視覚的に満足できる結果が得られ、0-255の歪み色(言うまでもなく、16-240などの他の範囲に拡大してもこれは当てはまります)。これらの観察は、上記のリンクで説明されている完全な変換手順のより細かい部分に反するように見えますが、それが機能することがわかりました。

0

がダークサイドにオーバー来ます。実際の地形のリリースはありませんので、ソースリポジトリを見てください。開発者リストに参加して質問を投稿してください(プロジェクトに貢献するためのソース)

+0

Спасибо。ありがとう、しかし、私は自分自身のOCRのものを書くしようとしますが、私はいくつかのインスピレーションとしてあなたのコードを使用すると確信しています。私は非常に具体的な仕事があり、リアルタイムの制約はないので、自分のコードで遊ぶ時間があります。私はカメラから戻ってくるこれらの生のフォーマットを解読する方法にもっと興味があります。 – Vitaly

+0

Незачто:)デモも生フォーマットをカバーします(プレビューから、基本的に同じです)。また、OCRのアイデアを同じプロジェクトで共有することもできます。 JavaOCRは、OCRの不変モーメントとクラスタ分析を使用します。 –

0

この回答はトピックの作成には役立ちませんが、自分の目的でカメラの生データをどのように使用するのが面白いかもしれません。それはffmpegです。それはアンドロイドのためにコンパイルすることができます。例えば、それを行う方法を与えることができるプロジェクトがあります。 https://github.com/guardianproject/android-ffmpeg-java https://www.ffmpeg.org/ Androidのカメラは、このコマンド のffmpegでのffmpegを養うことができ-f rawvideo -pixel_format nv21 -video_size 320×240 -framerate 15

関連する問題