翻譯|使用教程|編輯:楊鵬連|2021-02-09 11:49:09.780|閱讀 388 次
概述:從8.0版開始,Dynamsoft向開發人員公開更多參數和中間結果(例如,灰度圖像,二進制圖像,條形碼定位結果等),以進行應用程序調試和優化,從而使Dynamsoft Barcode SDK在商業條形碼SDK中脫穎而出。在本文中,我將介紹一些相關的參數和API。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Dynamsoft Barcode Reader SDK一款多功能的條碼讀取控件,只需要幾行代碼就可以將條碼讀取功能嵌入到Web或桌面應用程序。這可以節省數月的開發時間和成本。能支持多種圖像文件格式以及從攝像機或掃描儀獲取的DIB格式。使用Dynamsoft Barcode Reader SDK,你可以創建強大且實用的條形碼掃描儀軟件,以滿足你的業務需求。
點擊下載Dynamsoft Barcode Reader最新版
在使用條形碼SDK掃描單個或多個條形碼時,大多數開發人員只關心解碼速度和識別精度之間的權衡,因為他們無法獲取其他數據。從8.0版開始,Dynamsoft向開發人員公開更多參數和中間結果(例如,灰度圖像,二進制圖像,條形碼定位結果等),以進行應用程序調試和優化,從而使Dynamsoft Barcode SDK在商業條形碼SDK中脫穎而出。在本文中,我將介紹一些相關的參數和API。
要求
如果您已經成功安裝了OpenCV,則鏈接OpenCV庫非常簡單:
find_package(OpenCV REQUIRED) if (CMAKE_HOST_WIN32) if (CMAKE_CL_64) target_link_libraries (BarcodeReaderDemo "DBRx64" ${OpenCV_LIBS}) else () target_link_libraries (BarcodeReaderDemo "DBRx86" ${OpenCV_LIBS}) endif() else () target_link_libraries (BarcodeReaderDemo "DynamsoftBarcodeReader" ${OpenCV_LIBS}) endif()對于Dynamsoft Barcode SDK,鏈接目錄是手動設置的:
if (CMAKE_HOST_WIN32) if (CMAKE_CL_64) link_directories("${PROJECT_SOURCE_DIR}/lib/Windows/x64") else() link_directories("${PROJECT_SOURCE_DIR}/lib/Windows/x86") endif() else if(CMAKE_HOST_UNIX) link_directories("${PROJECT_SOURCE_DIR}/lib/Linux") endif()獲取轉換后的圖像和預測的條形碼邊界框
讓我們來看一下Dynamsoft條碼讀取器的工作原理。
使用Dynamsoft條碼讀取器掃描條碼的一般方法如下:
CBarcodeReader reader; ret = reader.InitLicense("LICENSE-KEY"); ret = reader.DecodeFile(imageFile, templateName); TextResultArray *finalResults = NULL; reader.GetAllTextResults(&finalResults); for (int index = 0; index < finalResults->resultsCount; index++) { printf("Value: %s\r\n", finalResults->results[index]->barcodeText); }
DynamsoftBarcodeReader.h頭文件中定義了一些枚舉類型:
typedef enum IntermediateResultType { /**No intermediate result */ IRT_NO_RESULT = 0x00000000, /**Original image */ IRT_ORIGINAL_IMAGE = 0x00000001, /**Colour clustered image. Not supported yet. */ IRT_COLOUR_CLUSTERED_IMAGE = 0x00000002, /**Colour image converted to grayscale */ IRT_COLOUR_CONVERTED_GRAYSCALE_IMAGE = 0x00000004, /**Transformed grayscale image */ IRT_TRANSFORMED_GRAYSCALE_IMAGE = 0x00000008, /**Predetected region */ IRT_PREDETECTED_REGION = 0x00000010, /**Preprocessed image */ IRT_PREPROCESSED_IMAGE = 0x00000020, /**Binarized image */ IRT_BINARIZED_IMAGE = 0x00000040, /**Text zone */ IRT_TEXT_ZONE = 0x00000080, /**Contour */ IRT_CONTOUR = 0x00000100, /**Line segment */ IRT_LINE_SEGMENT = 0x00000200, /**Form. Not supported yet. */ IRT_FORM = 0x00000400, /**Segmentation block. Not supported yet. */ IRT_SEGMENTATION_BLOCK = 0x00000800, /**Typed barcode zone */ IRT_TYPED_BARCODE_ZONE = 0x00001000, /**Predetected quadrilateral*/ IRT_PREDETECTED_QUADRILATERAL = 0x00002000 }IntermediateResultType;根據定義,很容易推斷Dynamsoft采用了哪些圖像處理算法。現在,我寫一些代碼片段來演示如何獲取灰度圖像,二進制圖像和條形碼邊界框。
在解碼條形碼圖像之前,請配置要獲取的中間數據:
reader.GetRuntimeSettings(&runtimeSettings); runtimeSettings.barcodeFormatIds = barcodeFormat.barcodeFormatIds; runtimeSettings.barcodeFormatIds_2 = barcodeFormat.barcodeFormatIds_2; runtimeSettings.intermediateResultSavingMode = IRSM_MEMORY; runtimeSettings.intermediateResultTypes = IRT_BINARIZED_IMAGE | IRT_TRANSFORMED_GRAYSCALE_IMAGE | IRT_TYPED_BARCODE_ZONE; runtimeSettings.scaleDownThreshold = 10000; ret = reader.UpdateRuntimeSettings(&runtimeSettings, errorMSG, 256);默認情況下,保存模式為IRSM_MEMORY。如果要將數據保存到文件系統,可以將其更改為IRSM_FILESYSTEM。所述scaleDownThreshold用于控制輸入圖像尺寸。如果輸入圖像的寬度大于閾值,則圖像將按比例縮小。
調用解碼方法后,我們可以調用GetIntermediateResults()以獲得混合數據列表:
IntermediateResultArray* intermediateResults = NULL; reader.GetIntermediateResults(&intermediateResults); for (int i = 0; i < intermediateResults->resultsCount; i++) { }如果數據類型為IMRDT_IMAGE,則可以獲取圖像緩沖區:
if(intermediateResults->results[i]->dataType == IMRDT_IMAGE) { int type = 0; ImageData* imageData = (ImageData*)intermediateResults->results[i]->results[0]; switch(imageData->format) { case IPF_BINARY: case IPF_GRAYSCALED: case IPF_BINARYINVERTED: type = CV_8UC1; break; case IPF_RGB_888: type = CV_8UC3; break; default: break; } }如果數據類型為IMRDT_LOCALIZATIONRESULT,則可以獲得條形碼邊界框:
if (intermediateResults->results[i]->dataType == IMRDT_LOCALIZATIONRESULT { LocalizationResult *pLocalizationResult = (LocalizationResult *)intermediateResults->results[i]->results[0]; int x1 = pLocalizationResult->x1; int y1 = pLocalizationResult->y1; int x2 = pLocalizationResult->x2; int y2 = pLocalizationResult->y2; int x3 = pLocalizationResult->x3; int y3 = pLocalizationResult->y3; int x4 = pLocalizationResult->x4; int y4 = pLocalizationResult->y4; }我們使用OpenCV imshow()函數顯示轉換后的圖像和條形碼邊界框。
灰度圖像
二進制圖像
條碼邊界框
您可以編寫代碼來探索Dynamsoft Barcode SDK生成的更多中間數據。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: