Пример кода для обнаружения QRCode в изображении
Я использую этот код в С# для декодирования (не обнаруживать) QRCode, и он работает:
LuminanceSource ls = new RGBLuminanceSource(image, image.Width, image.Height);
Result result = new QRCodeReader().decode(new BinaryBitmap(new HybridBinarizer(ls)));
Теперь я хотел бы обнаружить QRCode в более сложном изображении с множеством других материалов, таких как изображения и текст. Я не могу понять, как это сделать, потому что я не могу найти какой-либо образец и преобразовать Bitmap (С#) в Bitmatrix for Detector (zxing) не так прямо.
Есть ли у кого-нибудь код, чтобы дать мне?
Большое спасибо
UPDATE
Я пытаюсь выполнить этот код, но получаю сообщение ReadException:
Код:
LuminanceSource ls = new RGBLuminanceSource(bitmap, bitmap.Width, bitmap.Height);
QRCodeMultiReader multiReader = new QRCodeMultiReader();
Result[] rs = multiReader.decodeMultiple(new BinaryBitmap(new HybridBinarizer(ls)), hints);
return rs[0].Text;
Исключение
com.google.zxing.ReaderException:
in com.google.zxing.qrcode.detector.FinderPatternFinder.selectBestPatterns()
in com.google.zxing.qrcode.detector.FinderPatternFinder.find(Hashtable hints)
in com.google.zxing.qrcode.detector.Detector.detect(Hashtable hints)
in com.google.zxing.qrcode.QRCodeReader.decode(BinaryBitmap image, Hashtable hints)
in com.google.zxing.qrcode.QRCodeReader.decode(BinaryBitmap image)
in ...Logic.BarCodeManager.QRCodeReader(Bitmap bitmap) in
ОБНОВЛЕНИЕ 02/12/2011
Я только что попытался отсканировать отпечатанный QRCode (с куском кода в верхней части сообщения) с приложением на моем iPhone, и он работает хорошо! Таким образом, проблема, безусловно, находится в фазе обнаружения/декодирования.
Ответы
Ответ 1
QR-коды всегда имеют три квадрата в верхнем левом, верхнем правом, нижнем левом углах. Зная это, вы должны иметь возможность искать этот квадратный шаблон в пиксельных данных изображения, которое вы анализируете, чтобы выяснить верхний левый, ширину и высоту кода qr с небольшим количеством простого анализа логики.
Ответ 2
Хотя он старый. Я все еще хочу опубликовать его на случай, если кому-то это понадобится.
Шум изображений затрудняет для zxing обнаружение qrcodes. Результаты намного лучше, если изображения не содержат шума. Я использую простой способ уменьшения шума отсканированных изображений. Это можно сделать, уменьшив изображение. Коэффициент усадки может зависеть от шума изображений. Я обнаружил, что фактор 3 отлично работает в моем случае.
Ответ 3
private string Qrreader(Bitmap x)
{
BarcodeReader reader = new BarcodeReader { AutoRotate = true, TryHarder = true };
Result result = reader.Decode(x);
string decoded = result.ToString().Trim();
return decoded;
}
работает для меня! TryHarder делает поиск по всей картине