Back to Adaptive Vision Library website

You are here: Start » Function Reference » Computer Vision » Barcodes » DetectMultipleBarcodes

# DetectMultipleBarcodes

Determines the positions of multiple barcodes on the input image.

Applications: Detection of barcodes, but without actual recognition. Usually followed by a RecognizeBarcode filter.

### Syntax

C++
C#

void avl::DetectMultipleBarcodes
(
const avl::Image& inImage,
atl::Optional<avl::BarcodeFormat::Type> inFormat,
int inBaseBarWidth,
int inScanCount,
const int inScanWidth,
const float inMinStrength,
const float inSmoothingStdDev,
avl::Polarity::Type inPolarity,
atl::Array<avl::Rectangle2D>& outBarcodePositions,
atl::Optional<atl::Array<avl::Polarity::Type>&> outBarcodePolarities = atl::NIL,
atl::Optional<atl::Array<avl::Rectangle2D>&> outBarcodeCandidates = atl::NIL,
)


### Parameters

Name Type Range Default Description
inImage const Image& Input image
inFormat Optional<BarcodeFormat::Type> EAN13 Format of the barcode
inMinGradientLength float 0.0 - 8.0f Minimal gradient length of edge pixels used for detecting barcodes
inBaseBarWidth int 1 - 3 Estimated width of the thinnest bar
inScanCount int 1 - 5 Number of scan lines used in detecting barcode
inScanWidth const int 1 - 5 Width of the single scan
inMinStrength const float 0.0 - 5.0f Minimal strength of an extracted edge
inSmoothingStdDev const float 0.0 - 0.25f Standard deviation of the gaussian smoothing applied to the profile extracted in each scan
inPolarity Polarity::Type Dark Specifies whether code is darker or brighter than the background
outBarcodePositions Array<Rectangle2D>& Positions of the found barcodes
outBarcodePolarities Optional<Array<Polarity::Type>&> NIL Polarities of the found barcodes
outBarcodeCandidates Optional<Array<Rectangle2D>&> NIL Places with high gradient values that are further investigated

### Optional Outputs

The computation of following outputs can be switched off by passing value atl::NIL to these parameters: outBarcodePolarities, outBarcodeCandidates.

### Hints

• Connect inImage with the output of your image acquisition filter.
• Select inFormat according to the type of codes you want to read. If you choose the wrong format, the codes will not be recognized. Setting its value to Auto can increase the computation time considerably. Furthermore, the Auto value causes detection of UPC-A codes as EAN-13 codes.
• If the image quality is low, increase inMinGradientLength or increase inSmoothingStdDev. The diagGradientImage output shows how this affects an intermediate image.
• If the image resolution is high, increase inBaseBarWidth or resize/downsample the input image.

### Examples

 Filter finds barcodes rotated by any angle. Low quality barcode printed on plastic foil. Barcode on package wrapped in plastic foil. Barcode on blurry image. Barcode on reflective and wrapped surface. Barcode on standard 330ml can. EAN-13 with add-on 2 used to indicate a book edition. EAN-13 with add-on 5 to give a suggestion for the price.

### Minimal bar width requirement

To provide precise detection of the barcode width of the thinnest bar should be at least 1.5 pixels.

Depending on the barcode format guard or start/end code patterns must be readable.

### Pharmacode usage

The pharmacode barcode type can be read correctly in both directions. To get results from both directions use a Pharmacode and PharmacodeInversed barcode types.

Before decoding a Pharmacode the code orientation angle is normalized to a range from -45° to 135° what makes the code decoding more stable

Results of reading using a different Pharmacode directions: Pharmacode = 23 and PharmacodeInversed = 16.

### Using a relative coordinate systems

Read more about Local Coordinate Systems in Machine Vision Guide: Local Coordinate Systems.

### Hardware Acceleration

This operation supports automatic parallelization for multicore and multiprocessor systems.