Skip to content

decode_bar_code_rectangle2DecodeBarCodeRectangle2DecodeBarCodeRectangle2decode_bar_code_rectangle2T_decode_bar_code_rectangle2🔗

Short description🔗

decode_bar_code_rectangle2DecodeBarCodeRectangle2DecodeBarCodeRectangle2decode_bar_code_rectangle2T_decode_bar_code_rectangle2 — Decode bar code symbols within a rectangle.

Signature🔗

decode_bar_code_rectangle2( image Image, barcode BarCodeHandle, string CodeType, rectangle2.center.y Row, rectangle2.center.x Column, rectangle2.angle.rad Phi, rectangle2.hwidth Length1, rectangle2.hheight Length2, out string DecodedDataStrings )void DecodeBarCodeRectangle2( const HObject& Image, const HTuple& BarCodeHandle, const HTuple& CodeType, const HTuple& Row, const HTuple& Column, const HTuple& Phi, const HTuple& Length1, const HTuple& Length2, HTuple* DecodedDataStrings )static void HOperatorSet.DecodeBarCodeRectangle2( HObject image, HTuple barCodeHandle, HTuple codeType, HTuple row, HTuple column, HTuple phi, HTuple length1, HTuple length2, out HTuple decodedDataStrings )def decode_bar_code_rectangle2( image: HObject, bar_code_handle: HHandle, code_type: MaybeSequence[str], row: MaybeSequence[Union[int, float]], column: MaybeSequence[Union[int, float]], phi: MaybeSequence[Union[int, float]], length_1: MaybeSequence[Union[int, float]], length_2: MaybeSequence[Union[int, float]] ) -> Sequence[str]

def decode_bar_code_rectangle2_s( image: HObject, bar_code_handle: HHandle, code_type: MaybeSequence[str], row: MaybeSequence[Union[int, float]], column: MaybeSequence[Union[int, float]], phi: MaybeSequence[Union[int, float]], length_1: MaybeSequence[Union[int, float]], length_2: MaybeSequence[Union[int, float]] ) -> strHerror T_decode_bar_code_rectangle2( const Hobject Image, const Htuple BarCodeHandle, const Htuple CodeType, const Htuple Row, const Htuple Column, const Htuple Phi, const Htuple Length1, const Htuple Length2, Htuple* DecodedDataStrings )

HTuple HBarCode::DecodeBarCodeRectangle2( const HImage& Image, const HTuple& CodeType, const HTuple& Row, const HTuple& Column, const HTuple& Phi, const HTuple& Length1, const HTuple& Length2 ) const

HString HBarCode::DecodeBarCodeRectangle2( const HImage& Image, const HString& CodeType, double Row, double Column, double Phi, double Length1, double Length2 ) const

HString HBarCode::DecodeBarCodeRectangle2( const HImage& Image, const char* CodeType, double Row, double Column, double Phi, double Length1, double Length2 ) const

HString HBarCode::DecodeBarCodeRectangle2( const HImage& Image, const wchar_t* CodeType, double Row, double Column, double Phi, double Length1, double Length2 ) const (Windows only)

HTuple HImage::DecodeBarCodeRectangle2( const HBarCode& BarCodeHandle, const HTuple& CodeType, const HTuple& Row, const HTuple& Column, const HTuple& Phi, const HTuple& Length1, const HTuple& Length2 ) const

HString HImage::DecodeBarCodeRectangle2( const HBarCode& BarCodeHandle, const HString& CodeType, double Row, double Column, double Phi, double Length1, double Length2 ) const

HString HImage::DecodeBarCodeRectangle2( const HBarCode& BarCodeHandle, const char* CodeType, double Row, double Column, double Phi, double Length1, double Length2 ) const

HString HImage::DecodeBarCodeRectangle2( const HBarCode& BarCodeHandle, const wchar_t* CodeType, double Row, double Column, double Phi, double Length1, double Length2 ) const (Windows only)

HTuple HBarCode.DecodeBarCodeRectangle2( HImage image, HTuple codeType, HTuple row, HTuple column, HTuple phi, HTuple length1, HTuple length2 )

string HBarCode.DecodeBarCodeRectangle2( HImage image, string codeType, double row, double column, double phi, double length1, double length2 )

HTuple HImage.DecodeBarCodeRectangle2( HBarCode barCodeHandle, HTuple codeType, HTuple row, HTuple column, HTuple phi, HTuple length1, HTuple length2 )

string HImage.DecodeBarCodeRectangle2( HBarCode barCodeHandle, string codeType, double row, double column, double phi, double length1, double length2 )

Description🔗

The operator decode_bar_code_rectangle2DecodeBarCodeRectangle2 uses the bar code model specified by BarCodeHandlebarCodeHandlebar_code_handle to decode a bar code at a given position within the image Imageimageimage. BarCodeHandlebarCodeHandlebar_code_handle must be created with create_bar_code_modelCreateBarCodeModel, its parameters can be set with set_bar_code_paramSetBarCodeParam. The position of the bar code is given as an arbitrarily oriented rectangle. Contrary to find_bar_codeFindBarCode, where the decoding is preceded by a time consuming search for candidate regions, decode_bar_code_rectangle2DecodeBarCodeRectangle2 scans the provided region directly for bar codes. The rectangular region is defined by the parameters Rowrowrow and Columncolumncolumn for the center, Phiphiphi for the orientation and Length1length1length_1 and Length2length2length_2 for the half edge lengths (see gen_rectangle2GenRectangle2). The angle Phiphiphi also determines the reading direction and is defined as the angle between the reading direction of the bar code and the horizontal image axis. The angle is positive in counter clockwise direction and is given in radians as in gen_rectangle2GenRectangle2. Note that the angle unit deviates from the conventions in get_bar_code_resultGetBarCodeResult and set_bar_code_paramSetBarCodeParam where angles are given in degrees. Phiphiphi can be in the range of \([-\pi, +\pi]\). The reading direction is perpendicular to the bars of the bar code. Bar codes with a reading direction \(\textrm{Phi} + \pi\) are also returned. Multiple regions for decoding can be given by supplying tuples for Rowrowrow, Columncolumncolumn, Phiphiphi, Length1length1length_1 and Length2length2length_2.

The rectangle should cover completely the bar code and the quiet zones. Regions that are too big will be decoded, if there is no disturbing pattern within these regions and the height (Length2length2length_2) is small enough such that scanlines can be placed sufficiently dense. Rectangles that are too short in reading direction (Length1length1length_1) cannot be decoded.

decode_bar_code_rectangle2DecodeBarCodeRectangle2 can be used if the position of the bar code is already known in advance. For example, the candidate regions found by find_bar_codeFindBarCode and get_bar_code_objectGetBarCodeObject could be reused with a different code type (see the following example).

Multiple bar code types can be specified for CodeTypecodeTypecode_type. See section Autodiscrimination for find_bar_codeFindBarCode.

Further aspects of the actual decoding are explained with the operator find_bar_codeFindBarCode.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on internal data level.

This operator supports canceling timeouts and interrupts.

This operator modifies the state of the following input parameter:

During execution of this operator, access to the value of this parameter must be synchronized if it is used across multiple threads.

Parameters🔗

Imageimageimage (input_object) singlechannelimage → object (byte)HObject (byte)HImage (byte)HObject (byte)Hobject (byte)

Input image.

BarCodeHandlebarCodeHandlebar_code_handle (input_control, state is modified) barcode → (handle)HTuple (HHandle)HBarCode, HTuple (IntPtr)HHandleHtuple (handle)

Handle of the bar code model.

CodeTypecodeTypecode_type (input_control) string(-array) → (string)HTuple (HString)HTuple (string)MaybeSequence[str]Htuple (char*)

Type of the searched bar code.

Default: 'EAN-13'"EAN-13"
List of values: '2/5 Industrial', '2/5 Interleaved', 'Codabar', 'Code 128', 'Code 39', 'Code 93', 'EAN-13 Add-On 2', 'EAN-13 Add-On 5', 'EAN-13', 'EAN-8 Add-On 2', 'EAN-8 Add-On 5', 'EAN-8', 'GS1 DataBar Expanded Stacked', 'GS1 DataBar Expanded', 'GS1 DataBar Limited', 'GS1 DataBar Omnidir', 'GS1 DataBar Stacked Omnidir', 'GS1 DataBar Stacked', 'GS1 DataBar Truncated', 'GS1-128', 'MSI', 'PharmaCode', 'UPC-A Add-On 2', 'UPC-A Add-On 5', 'UPC-A', 'UPC-E Add-On 2', 'UPC-E Add-On 5', 'UPC-E', 'auto'"2/5 Industrial", "2/5 Interleaved", "Codabar", "Code 128", "Code 39", "Code 93", "EAN-13 Add-On 2", "EAN-13 Add-On 5", "EAN-13", "EAN-8 Add-On 2", "EAN-8 Add-On 5", "EAN-8", "GS1 DataBar Expanded Stacked", "GS1 DataBar Expanded", "GS1 DataBar Limited", "GS1 DataBar Omnidir", "GS1 DataBar Stacked Omnidir", "GS1 DataBar Stacked", "GS1 DataBar Truncated", "GS1-128", "MSI", "PharmaCode", "UPC-A Add-On 2", "UPC-A Add-On 5", "UPC-A", "UPC-E Add-On 2", "UPC-E Add-On 5", "UPC-E", "auto"

Rowrowrow (input_control) rectangle2.center.y(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[int, float]]Htuple (double / Hlong)

Row index of the center.

Default: 50.050.0

Columncolumncolumn (input_control) rectangle2.center.x(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[int, float]]Htuple (double / Hlong)

Column index of the center.

Default: 100.0100.0

Phiphiphi (input_control) rectangle2.angle.rad(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[int, float]]Htuple (double / Hlong)

Orientation of rectangle in radians.

Default: 0.00.0
Suggested values: 0.0, 0.785398, 1.570796, 3.14159260.0, 0.785398, 1.570796, 3.1415926

Length1length1length_1 (input_control) rectangle2.hwidth(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[int, float]]Htuple (double / Hlong)

Half of the length of the rectangle along the reading direction of the bar code.

Default: 200.0200.0

Length2length2length_2 (input_control) rectangle2.hheight(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[int, float]]Htuple (double / Hlong)

Half of the length of the rectangle perpendicular to the reading direction of the bar code.

Default: 100.0100.0

DecodedDataStringsdecodedDataStringsdecoded_data_strings (output_control) string(-array) → (string)HTuple (HString)HTuple (string)Sequence[str]Htuple (char*)

Data strings of all successfully decoded bar codes.

Example🔗

(HDevelop)

read_image (Image, 'barcode/ean13/ean1301.png')
create_bar_code_model ([], [], BHandle)
find_bar_code (Image, SymReg, BHandle, '2/5 Industrial', Dec)
if (|Dec| == 0)
*     A 2/5 Industrial code wasn't found. Try decoding an EAN-13 code.
    get_bar_code_object (CandReg, BHandle, 'all', 'candidate_regions')
    smallest_rectangle2 (CandReg, R, C, Phi, L1, L2)
    decode_bar_code_rectangle2 (Image, BHandle, 'EAN-13', R, C, Phi, \
                                L1, L2, Dec)
endif

Result🔗

The operator decode_bar_code_rectangle2DecodeBarCodeRectangle2 returns the value 2 (H_MSG_TRUE) if the given parameters are correct. Otherwise, an exception will be raised.

Combinations with other operators🔗

Combinations

Possible predecessors

create_bar_code_modelCreateBarCodeModel, set_bar_code_paramSetBarCodeParam, smallest_rectangle2SmallestRectangle2

Possible successors

get_bar_code_resultGetBarCodeResult, get_bar_code_objectGetBarCodeObject, clear_bar_code_modelClearBarCodeModel

Alternatives

find_bar_codeFindBarCode

See also

gen_rectangle2GenRectangle2

Module🔗

Bar Code