Member 12148427 Ответов: 2

Qrcode большое изображение с использованием C#


IBarcodeReader reader = new BarcodeReader();

    for (int i = 100; i < img.Width; i++)
    {
        for (int j = 100; j < img.Height; j++)
        {
            imgw = i; imgh = j;
            Bitmap bmp = new Bitmap(img, imgw, imgh);
            Qrresult = reader.Decode(bmp);
            if (Qrresult != null)
            {
                QRcodevalue = Qrresult.Text;
                bmp.Dispose();
                img.Dispose();
                return QRcodevalue;
            }
            j = j + 100;
            bmp.Dispose();
        }
        i = i + 100;
    }

Я вернул этот код, но на расшифровку QR-кода уходит слишком много времени. Плз помогите мне спасибо

Что я уже пробовал:

IBarcodeReader reader = новый BarcodeReader();

for (int i = 100; i < img.Ширина; i++)
{
для (int j = 100; j < img.Высота; j++)
{
imgw = i; imgh = j;
Bitmap bmp = новое растровое изображение(img, imgw, imgh);
Qrresult = читатель.Декодирование (bmp);
if (Qrresult != null)
{
QRcodevalue = Qrresult.Текст;
формат BMP.Располагать();
НВФ.Располагать();
вернуться QRcodevalue;
}
j = j + 100;
формат BMP.Располагать();
}
i = i + 100;
}

Richard MacCutchan

В чем вопрос?

Member 12148427

Дорогой Ричард,
Я хочу прочитать QR-код с изображения. Изображение имеет большой размер и содержит не только QR-код, но и другие объекты. Пожалуйста, помогите мне...Спасибо Субраманьям

George Jonsson

Это не вопрос, а дамп кода.
Какая у вас проблема и какая помощь вам нужна?

Member 12148427

Спасибо Джордж,
Я хочу прочитать QR-код с изображения. Изображение имеет большой размер и содержит не только QR-код. Пожалуйста, помогите мне...Спасибо Субраманьям

2 Ответов

Рейтинг:
1

George Jonsson

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

Вероятно, было бы лучше использовать один из доступных инструментов видения и попытаться найти координаты и размер QR-кода с помощью blob-инструмента или чего-то подобного.
К сожалению, я немного заржавел, используя бесплатный инструмент vision, но есть несколько библиотек, которые вы можете использовать, например Emgu CV: OpenCV в .NET (C#, VB, C++ и многое другое)[^] и Согласие.Сетевая структура машинного обучения[^]

Тем не менее, вы можете попытаться улучшить код, который у вас есть, немного изменив его.

IBarcodeReader reader = new BarcodeReader();

int imgw = 100; 
int imgh = 100;
while ((imgW < img.Width) && (imgh < img.Height))
{
    Bitmap bmp = new Bitmap(img, imgw, imgh);
    Qrresult = reader.Decode(bmp);
    if (Qrresult != null)
    {
        QRcodevalue = Qrresult.Text;
        bmp.Dispose();
        img.Dispose();
        return QRcodevalue;
    }
    bmp.Dispose();
    
    imgw += 100;
    imgh += 100;
}

Этот код должен быть быстрее, но, возможно, это не то, что вы ищете.

Другой вариант-создать скользящее окно, которое перемещается по изображению.
Для этого вы можете использовать Растровый.Метод Клонирования (Rectangle, PixelFormat) (System.Рисование)[^]
Это работает, если вы заранее знаете размер QR-кода.

В основном вы создаете прямоугольник фиксированного размера, который перемещаете слева направо по строкам.
Когда скользящее окно достигает правой стороны, координата x сбрасывается на 0, а координата y увеличивается на высоту окна.
Это также требует вложенных циклов, так что это может быть не быстрее, если вы не можете предвидеть, где во всем изображении, скорее всего, появится QR-код.
Если это так, то у вас будет более быстрый алгоритм в большинстве случаев, но не во всех.

Надеюсь, у вас есть хоть какие-то идеи, чтобы двигаться дальше.


Рейтинг:
0

Patrice T

Я не знаю, в чем тут нужда reader.Decode, но я знаю, что создание нового растрового изображения внутри цикла-плохая идея, потому что это отнимает много времени.
Вам нужно найти другой метод,который не требует создания растрового изображения в циклах.

Когда дело доходит до оптимизации скорости, инструментом выбора является профилировщик.
то профилировщик есть ли там, чтобы сказать вам, сколько времени вы тратите в каждой части вашего кода и обнаружить "узкие места".