ImagePreprocessingFilters.cpp
#include "stdafx.h" /// /// This example demonstrates the use of image filters to improve the decoding confidence or speed. /// #import "c:\\Program Files\\Bytescout BarCode Reader SDK\\net2.00\\Bytescout.BarCodeReader.tlb" raw_interfaces_only using namespace Bytescout_BarCodeReader; void PrintFoundBarcodes(IReaderPtr pIReader); int _tmain(int argc, _TCHAR* argv[]) { // Initialize COM. HRESULT hr = CoInitialize(NULL); // Create the interface pointer. IReaderPtr pIReader(__uuidof(Reader)); // set the registration name and key _bstr_t registrationName(L"DEMO"); pIReader->put_RegistrationName(registrationName); _bstr_t registrationKey(L"DEMO"); pIReader->put_RegistrationKey(registrationKey); // Set barcode type to find _BarcodeTypeSelectorPtr pBarcodeTypesToFind; pIReader->get_BarcodeTypesToFind(&pBarcodeTypesToFind); pBarcodeTypesToFind->put_Code128(VARIANT_TRUE); // Get image filters collection _ImagePreprocessingFiltersCollection* pIImageFilters; pIReader->get_ImagePreprocessingFilters(&pIImageFilters); // WORKING WITH LOW CONTRAST BARCODE IMAGES pIImageFilters->AddContrast(40); // Add contrast adjustment for low-contrast image _bstr_t sampleFile1(L".\\low-contrast-barcode.png"); wprintf(L"Image \"%s\"\n", static_cast<wchar_t*>(sampleFile1)); pIReader->ReadFromFile(sampleFile1); PrintFoundBarcodes(pIReader); pIImageFilters->Clear(); // WORKING WITH NOISY BARCODE IMAGES // Add median filter to lower a noise pIImageFilters->AddMedian(); _bstr_t sampleFile2(L".\\noisy-barcode.png"); wprintf(L"Image \"%s\"\n", static_cast<wchar_t*>(sampleFile2)); pIReader->ReadFromFile(sampleFile2); PrintFoundBarcodes(pIReader); pIImageFilters->Clear(); // WORKING WITH DENSE AND ILLEGIBLE BARCODES // Add the scale filter to enlarge the barcode to make gaps between bars more distinguishable pIImageFilters->AddScale_2(2.0); _bstr_t sampleFile3(L".\\too-dense-barcode.png"); wprintf(L"Image \"%s\"\n", static_cast<wchar_t*>(sampleFile3)); pIReader->ReadFromFile(sampleFile3); PrintFoundBarcodes(pIReader); pIImageFilters->Clear(); // REMOVE EMPTY MARGINS FROM IMAGE TO SPEED UP THE PROCESSING // Add the crop filter to cut off empty margins from the image. // This will not improve the recognition quality but may speed up the processing // if you enabled multiple barcode types to search. pIImageFilters->AddCropDark(); _bstr_t sampleFile4(L".\\barcode-with-large-margins.png"); wprintf(L"Image \"%s\"\n", static_cast<wchar_t*>(sampleFile4)); pIReader->ReadFromFile(sampleFile4); PrintFoundBarcodes(pIReader); pIImageFilters->Clear(); // Uninitialize COM. CoUninitialize(); // Wait until user press any key system("pause"); return 0; } void PrintFoundBarcodes(IReaderPtr pIReader) { // Get found barcode count long count; pIReader->get_FoundCount(&count); // Get found barcode information for (int i = 0; i < count; i++) { SymbologyType type; pIReader->GetFoundBarcodeType(i, &type); wprintf(L"Barcode type: %d\n", type); float confidence; pIReader->GetFoundBarcodeConfidence(i, &confidence); wprintf(L"Barcode confidence: %f\n", confidence); BSTR bstrValue; pIReader->GetFoundBarcodeValue(i, &bstrValue); wprintf(L"Barcode value: %s\n", bstrValue); ::SysFreeString(bstrValue); wprintf(L"\n"); } if (count == 0) { wprintf(L"No barcodes found.\n"); } }
stdafx.cpp
// stdafx.cpp : source file that includes just the standard includes // CPPExample.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" // TODO: reference any additional headers you need in STDAFX.H // and not in this file
Click here to get your Free Trial version of the SDK
also available as: