Пример кода для обнаружения QRCode в изображении - PullRequest
22 голосов
/ 01 декабря 2011

Я использую этот код в C # для декодирования (не обнаружения) QRCode, и он работает:

LuminanceSource ls = new RGBLuminanceSource(image, image.Width, image.Height);
Result result = new QRCodeReader().decode(new BinaryBitmap(new HybridBinarizer(ls)));

Теперь я хотел бы обнаружить QRCode в более сложном изображении с множеством других вещей, таких как изображения и текст. Я не могу понять, как это сделать, потому что я не могу найти образец, и преобразование Bitmap (C #) в Bitmatrix for Detector (zxing) не такое прямое.

У кого-нибудь есть кусок кода, чтобы дать мне?

спасибо большое


UPDATE


Я пробую этот код, но получаю ReaderException:

код:

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

Ответы [ 3 ]

1 голос
/ 19 апреля 2013

Хотя оно старое.Я все еще хочу опубликовать это на тот случай, если это кому-то понадобится.Шум изображений затрудняет их обнаружение.Результаты намного лучше, если изображения не содержат шумов.Я использую простой метод, чтобы уменьшить шум отсканированных изображений.Это можно сделать, уменьшив изображение.Коэффициент сжатия может варьироваться в зависимости от шума изображений.Я обнаружил, что фактор 3 отлично работает в моем случае.

1 голос
/ 01 декабря 2011

QR-коды всегда имеют три квадрата в верхнем левом, верхнем правом и нижнем левом углах. Зная это, вы сможете найти этот квадратный шаблон в пиксельных данных анализируемого изображения, чтобы выяснить верхний левый угол, ширину и высоту кода qr с помощью небольшого простого логического анализа.

0 голосов
/ 20 июня 2016
        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 делает поиск по всей картинке

...