VintaSoft Barcode .NET SDK 15.1: Руководство для .NET разработчика
В этом разделе
    Как SDK распознает штрих-коды в цветном изображении
    В этом разделе
    Цветное, палитровое или серое изображение (цветное изображение) преобразуется в черно-белое изображение перед распознаванием штрих-кода.

    Вот список шагов, который выполняется алгоритмом преобразования изображения:
    1. Определить цветовой порог, который будет использован для разделения пикселов изображения на черные и белые
    2. Сумма компонентов цвета (T) рассчитывается для каждого пикселя по следующей формуле: T = R + G + B
    3. Цвет пикселя меняется на черный, если T меньше значения цветового порога.
    4. Цвет пикселя меняется на белый, если T больше или равно значению цветового порога.

    Режим автоматического распознавания штрих-кодов

    Этот режим позволяет максимально упростить процесс распознавания штрих-кодов. Вам нужно установить только ожидаемое количество штрих-кодов и значение интервала сканирования.

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

    Определение цветового порога для распознавания штрих-кодов

    Цветовой порог может быть:

    Следует использовать режим Vintasoft.Barcode.ThresholdMode.Automatic, если нужно распознать штрих-коды с множества разных изображений, например, изображения получены с разных устройств и в разных условиях освещения.
    Следует использовать режим Vintasoft.Barcode.ThresholdMode.Manual, если нужно распознать штрих-коды с похожих изображений, например, используется порог, который дает лучший результат распознавания для коллекции штрих-кодов.
    Следует использовать режим Vintasoft.Barcode.ThresholdMode.Iterations, если нужно распознать штрих-коды в изображениях, где трудно найти одно пороговое значение.

    Пример: Вот пример, который показывает, как обнаруживать штрих-коды на цветном изображении в котором трудно определить цветовой порог.
    /// <summary>
    /// Reads barcodes from color image.
    /// </summary>
    /// <param name="filename">A path to an image file.</param>
    /// <returns>A string with information about recognized barcodes.</returns>
    public static string ReadBarcodesFromColorImage(string filename)
    {
        // create a BarcodeReader object
        using (Vintasoft.Barcode.BarcodeReader barcodeReader = new Vintasoft.Barcode.BarcodeReader())
        {
            // specify that only Code 39, EAN, PDF417 and Micro PDF417 barcodes must be searched
            barcodeReader.Settings.ScanBarcodeTypes =
                Vintasoft.Barcode.BarcodeType.Code39 |
                Vintasoft.Barcode.BarcodeType.EAN8 |
                Vintasoft.Barcode.BarcodeType.EAN13 |
                Vintasoft.Barcode.BarcodeType.PDF417 |
                Vintasoft.Barcode.BarcodeType.MicroPDF417;
    
            // specify that only image pixels of every 5 row and column must analyzed for barcode searching
            barcodeReader.Settings.ScanInterval = 5;
    
            // specify that barcode searching must be stopped when 10 barcodes are searched
            barcodeReader.Settings.ExpectedBarcodes = 10;
    
            // extract barcodes
            Vintasoft.Barcode.IBarcodeInfo[] infos = barcodeReader.ReadBarcodes(filename);
    
            // if barcodes are not detected
            if (infos == null || infos.Length == 0)
                return "Codes are not detected.";
    
            // get information about extracted barcodes
            System.Text.StringBuilder resultString = new System.Text.StringBuilder();
            resultString.AppendLine(string.Format("Codes detected [{0}]:", infos.Length));
            for (int i = 0; i < infos.Length; i++)
                resultString.AppendLine(infos[i].ToString());
            return resultString.ToString();
        }
    }
    
    ''' <summary>
    ''' Reads barcodes from color image.
    ''' </summary>
    ''' <param name="filename">A path to an image file.</param>
    ''' <returns>A string with information about recognized barcodes.</returns>
    Public Shared Function ReadBarcodesFromColorImage(filename As String) As String
        ' create a BarcodeReader object
        Using barcodeReader As New Vintasoft.Barcode.BarcodeReader()
            ' specify that only Code 39, EAN, PDF417 and Micro PDF417 barcodes must be searched
            barcodeReader.Settings.ScanBarcodeTypes = Vintasoft.Barcode.BarcodeType.Code39 Or Vintasoft.Barcode.BarcodeType.EAN8 Or Vintasoft.Barcode.BarcodeType.EAN13 Or Vintasoft.Barcode.BarcodeType.PDF417 Or Vintasoft.Barcode.BarcodeType.MicroPDF417
    
            ' specify that only image pixels of every 5 row and column must analyzed for barcode searching
            barcodeReader.Settings.ScanInterval = 5
    
            ' specify that barcode searching must be stopped when 10 barcodes are searched
            barcodeReader.Settings.ExpectedBarcodes = 10
    
            ' extract barcodes
            Dim infos As Vintasoft.Barcode.IBarcodeInfo() = barcodeReader.ReadBarcodes(filename)
    
            ' if barcodes are not detected
            If infos Is Nothing OrElse infos.Length = 0 Then
                Return "Codes are not detected."
            End If
    
            ' get information about extracted barcodes
            Dim resultString As New System.Text.StringBuilder()
            resultString.AppendLine(String.Format("Codes detected [{0}]:", infos.Length))
            For i As Integer = 0 To infos.Length - 1
                resultString.AppendLine(infos(i).ToString())
            Next
            Return resultString.ToString()
        End Using
    End Function