ZXing ライブラリを使用して Datamatrix バーコードをデコードしようとしています。ここに私のコードサンプルがあります:
BufferedImage bi = img.getBufferedImage();
Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
LuminanceSource source = new BufferedImageLuminanceSource(bi);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
DataMatrixReader dataMatrixReader = new DataMatrixReader();
try {
Result res = dataMatrixReader.decode(bitmap,hints);
System.out.println("resultText = "+res.getText());
} catch (Exception e) {
System.out.println("failed to get resultText");
e.printStackTrace();
}
https://stackoverflow.com/や他のサイトでほぼ同じサンプルを何度も見てきましたが、このアプローチはこの形式では機能しません。
ソースとして、IR カメラから取得した画像を使用しています。画像の例を次に示します:
ご覧のとおり、 Sean Owenがこことここで推奨し
ているように、バーコードはほぼ正確に画像の中心にあります。この画像をプログラムで白黒に変換し、画像をクロップしてバーコードをバインドし、その周りに空白のみを配置すると、ZXing はこのような画像で完全に機能します。しかし問題は、実際のバーコードにはほとんど変形がないため、私の単純なアルゴリズムでは画像を適切に切り取ることができないということです。さらにオーバーバーコードが画像の中心に正確に配置されていない可能性があり、コールドでは明るさが少し異なります。このような画像上の特定のオブジェクトの配置を見つけるためのOpenCV機能について言及しているスレッドを見ました、しかし、彼らはかなり古いです。あれから何か変わった?そして、私の特定の状況で 100% 信頼できる datamatrix デコーダー (および検出器) を作成するには、何を考慮する必要がありますか?
参照用に、対応するオブジェクトの .toString() テキスト出力で作成された LuminanceSource および BinaryBitmap 画像を提供することにしました:
http://s28.postimg.org/l53sykhx9/Binary_Bitmap.png
および /65z0vlbpl/Luminance_Source.png (同じドメイン)。それらは見栄えがよく、デコードの準備ができていますが、デコードの何が問題なのですか。
結局のところ、この画像と同様の画像は、スマートフォンのソフトウェアで非常にうまく認識およびデコードされ、同じ結果を達成したいと思っています.