翻譯|使用教程|編輯:楊鵬連|2021-02-09 11:49:09.780|閱讀 394 次
概述:從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@ke049m.cn
文章轉載自: