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

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

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

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

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

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

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

Вот пример C#/VB.NET кода, который показывает, как обнаруживать штрих-коды на цветном изображении в котором трудно определить цветовой порог.
/// <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