Подтвердить что ты не робот

Пример кода для обнаружения 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, и он работает хорошо! Таким образом, проблема, безусловно, находится в фазе обнаружения/декодирования.

4b9b3361

Ответ 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 делает поиск по всей картине