Merge branch 'dev' of http://192.168.10.5:8099/sane/code_device into dev
This commit is contained in:
commit
c770715397
|
@ -6,6 +6,8 @@
|
|||
#include "Device/filetools.h"
|
||||
#endif // LOG
|
||||
|
||||
//#define DRAW_PIC
|
||||
|
||||
CImageApplyOutHole::CImageApplyOutHole(void)
|
||||
: CImageApply()
|
||||
, m_borderSize(20)
|
||||
|
@ -76,14 +78,20 @@ void CImageApplyOutHole::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
|
|||
cv::Mat front_thre, back_thre;
|
||||
hg::threshold_Mat(front, front_thre, m_threshold);
|
||||
hg::threshold_Mat(back, back_thre, m_threshold);
|
||||
//cv::imwrite("front_thre.jpg", front_thre);
|
||||
//cv::imwrite("back_thre.jpg", back_thre);
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("front_thre.jpg", front_thre);
|
||||
cv::imwrite("back_thre.jpg", back_thre);
|
||||
#endif
|
||||
|
||||
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5 * resize_scale, 1));
|
||||
cv::morphologyEx(front_thre, front_thre, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1, cv::BORDER_CONSTANT, cv::Scalar::all(0));
|
||||
cv::morphologyEx(back_thre, back_thre, cv::MORPH_OPEN, element, cv::Point(-1, -1), 1, cv::BORDER_CONSTANT, cv::Scalar::all(0));
|
||||
//cv::imwrite("front_thre2.jpg", front_thre);
|
||||
//cv::imwrite("back_thre2.jpg", back_thre);
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("front_thre2.jpg", front_thre);
|
||||
cv::imwrite("back_thre2.jpg", back_thre);
|
||||
#endif
|
||||
|
||||
//反面二值化图像水平翻转
|
||||
cv::flip(back_thre, back_thre, 1); //1:Horizontal
|
||||
|
@ -94,22 +102,22 @@ void CImageApplyOutHole::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
|
|||
hg::findContours(front_thre.clone(), contours_front, b1_front, cv::RETR_CCOMP);
|
||||
hg::findContours(back_thre.clone(), contours_back, b1_back, cv::RETR_CCOMP);
|
||||
|
||||
//提取正反面图像最大轮廓
|
||||
for (size_t i = 0; i < contours_front.size(); i++)
|
||||
if (contours_front[i].size() < MIN_CONTOUR_SIZE)
|
||||
{
|
||||
contours_front.erase(contours_front.begin() + i);
|
||||
b1_front.erase(b1_front.begin() + i);
|
||||
i--;
|
||||
}
|
||||
////提取正反面图像最大轮廓
|
||||
//for (size_t i = 0; i < contours_front.size(); i++)
|
||||
// if (contours_front[i].size() < MIN_CONTOUR_SIZE)
|
||||
// {
|
||||
// contours_front.erase(contours_front.begin() + i);
|
||||
// b1_front.erase(b1_front.begin() + i);
|
||||
// i--;
|
||||
// }
|
||||
|
||||
for (size_t i = 0; i < contours_back.size(); i++)
|
||||
if (contours_back[i].size() < MIN_CONTOUR_SIZE)
|
||||
{
|
||||
contours_back.erase(contours_back.begin() + i);
|
||||
b1_back.erase(b1_back.begin() + i);
|
||||
i--;
|
||||
}
|
||||
//for (size_t i = 0; i < contours_back.size(); i++)
|
||||
// if (contours_back[i].size() < MIN_CONTOUR_SIZE)
|
||||
// {
|
||||
// contours_back.erase(contours_back.begin() + i);
|
||||
// b1_back.erase(b1_back.begin() + i);
|
||||
// i--;
|
||||
// }
|
||||
|
||||
std::vector<cv::Point> maxContour_front = hg::getMaxContour(contours_front, b1_front);
|
||||
std::vector<cv::Point> maxContour_back = hg::getMaxContour(contours_back, b1_back);
|
||||
|
@ -132,26 +140,41 @@ void CImageApplyOutHole::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
|
|||
|
||||
cv::Mat roiMat_front(front_thre, roi_front); //在正面二值图像中截取重叠部分
|
||||
cv::Mat roiMat_back(back_thre, roi_back); //在反面二值图像中截取重叠部分
|
||||
//cv::imwrite("roiMat_front.jpg", roiMat_front);
|
||||
//cv::imwrite("roiMat_back.jpg", roiMat_back);
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("roiMat_front.jpg", roiMat_front);
|
||||
cv::imwrite("roiMat_back.jpg", roiMat_back);
|
||||
#endif
|
||||
|
||||
//正反面二值图像做或运算,真正镂空区域保留0,其他地方填充为255
|
||||
cv::Mat mask;
|
||||
cv::bitwise_or(roiMat_front, roiMat_back, mask); //或运算,正反面二值图像重叠
|
||||
//cv::imwrite("mask1.jpg", mask);
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("mask1.jpg", mask);
|
||||
#endif
|
||||
|
||||
//二值图像重叠图像颜色取反,膨胀,提取轮廓
|
||||
cv::bitwise_not(mask, mask);
|
||||
//cv::imwrite("mask2.jpg", mask); //反色
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("mask2.jpg", mask); //反色
|
||||
#endif
|
||||
|
||||
//为了避免孔洞彻底贯穿纸边,人为绘制纸张轮廓,确保所有孔洞为封闭图形,不会与背景粘连
|
||||
cv::polylines(mask, hg::getVertices(mask_rotatedRect), true, cv::Scalar(0), LINE_WIDTH * resize_scale); //绘制纸张矩形边缘
|
||||
//cv::imwrite("mask3.jpg", mask);
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("mask3.jpg", mask);
|
||||
#endif
|
||||
|
||||
//膨胀算法,增大孔洞连通区域面积
|
||||
element = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(DILATE_SIZE * resize_scale, DILATE_SIZE * resize_scale));
|
||||
cv::dilate(mask, mask, element, cv::Point(-1, -1), 1, cv::BORDER_CONSTANT, cv::Scalar(255));
|
||||
//cv::imwrite("mask4.jpg", mask);
|
||||
|
||||
#ifdef DRAW_PIC
|
||||
cv::imwrite("mask4.jpg", mask);
|
||||
#endif
|
||||
|
||||
//提取重叠图像轮廓
|
||||
std::vector<std::vector<cv::Point>> contours_mask;
|
||||
|
|
|
@ -25,7 +25,8 @@
|
|||
* 2022/09/16 v1.9 优化内存消耗
|
||||
* 2022/09/16 v1.9.1 修复缩放比例的逻辑错误。
|
||||
* 2022/11/17 v1.9.2 修复寻找孔洞轮廓BUG。
|
||||
* 版本号:v1.9.2
|
||||
* 2023/05/16 v1.9.3 修复提取纸张最大轮廓的逻辑BUG。
|
||||
* 版本号:v1.9.3
|
||||
|
||||
* ====================================================
|
||||
*/
|
||||
|
|
|
@ -161,7 +161,7 @@ hg_scanner::hg_scanner(ScannerSerial serial, const char* dev_name, usb_io* io, i
|
|||
, is_auto_paper_scan_exit_time(60), is_read_int(true), is_auto_feedmode_(false)
|
||||
, firmware_sup_wait_paper_(false),firmware_sup_pick_strength_(false),firmware_sup_log_export_(false),firmware_sup_color_corr_(false),firmware_sup_wake_device_(false)
|
||||
, firmware_sup_double_img(false),firmware_sup_devs_lock_(false),firmware_sup_dpi_300(false),firmware_sup_dpi_600(false),firmware_sup_auto_speed_(false),firmware_sup_morr_(false)
|
||||
, firmware_sup_color_fill_(false),firmware_sup_history_cnt(false), have_max_size(false), is_discardblank(false)
|
||||
, firmware_sup_color_fill_(false),firmware_sup_history_cnt(false), have_max_size(false), is_discardblank(false),firmware_sup_device_7010(false)
|
||||
, auto_scan_restore_(false), auto_scan_prev_(is_auto_paper_scan)
|
||||
{
|
||||
#if !defined(_WIN32) && !defined(_WIN64) &&defined(x86_64)
|
||||
|
@ -456,12 +456,12 @@ int hg_scanner::hg_version_init_handle()
|
|||
{
|
||||
int ret = SCANNER_ERR_OK;
|
||||
#ifndef WIN32
|
||||
string scanner_path = hg_log::get_module_full_path(LIBNAME);
|
||||
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
|
||||
if (scanner_path.empty())
|
||||
{
|
||||
return SCANNER_ERR_OUT_OF_RANGE;
|
||||
}
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME));
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
|
||||
string HGVersionlib_path = scanner_path + HGVERSION_LIBNANE;
|
||||
|
||||
if (access(HGVersionlib_path.c_str(), F_OK) != 0)
|
||||
|
@ -482,8 +482,8 @@ int hg_scanner::hg_version_init_handle()
|
|||
HGVersion_Free_ = (SDKHGVersion_Free_)dlsym(Dynamicopen_HGVersion_pHandle_, "HGVersion_DestroyMgr");
|
||||
|
||||
#else
|
||||
string scanner_path = hg_log::get_module_full_path(LIBNAME);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME));
|
||||
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
|
||||
|
||||
string HGVersionlib_path = scanner_path + HGVERSION_LIBNANE;
|
||||
wchar_t* Prclibbuffer = new wchar_t[HGVersionlib_path.length() + 1];
|
||||
|
|
|
@ -430,14 +430,6 @@ protected:
|
|||
|
||||
void adjust_filling_hole(LPSCANCONF conf);
|
||||
|
||||
enum thread_running
|
||||
{
|
||||
THREAD_RUNNING_IDLE = 0,
|
||||
THREAD_RUNNING_USB = 1 << 0,
|
||||
THREAD_RUNNING_IMAGE = 1 << 1,
|
||||
};
|
||||
int is_running(void); // return thread_running
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// 新增自定义伽玛曲线及扫描区域属性 - 2022-05-05
|
||||
bool custom_gamma_; // 为true时,应用custom_gamma_val_阵列调整图像色彩;为false时,保持原来的处理方式
|
||||
|
@ -476,6 +468,14 @@ public:
|
|||
bool is_online(void);
|
||||
void on_language_changed(void);
|
||||
|
||||
enum thread_running
|
||||
{
|
||||
THREAD_RUNNING_IDLE = 0,
|
||||
THREAD_RUNNING_USB = 1 << 0,
|
||||
THREAD_RUNNING_IMAGE = 1 << 1,
|
||||
};
|
||||
int is_running(void); // return thread_running
|
||||
|
||||
public:
|
||||
virtual int start(void);
|
||||
virtual int get_image_info(SANE_Parameters* ii, int len);
|
||||
|
|
|
@ -866,8 +866,8 @@ int hg_scanner_300::initdevice()
|
|||
{
|
||||
if (fw.substr(4, 6) == "230303")
|
||||
{
|
||||
string scanner_path = hg_log::get_module_full_path(LIBNAME);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME));
|
||||
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
|
||||
scanner_path += "update.zip";
|
||||
set_firmware_upgrade(scanner_path);
|
||||
return SCANNER_ERR_OK;
|
||||
|
@ -1558,8 +1558,8 @@ int hg_scanner_300::set_updata0303(void)
|
|||
{
|
||||
if (fw.substr(4, 6) == "230303")
|
||||
{
|
||||
string scanner_path = hg_log::get_module_full_path(LIBNAME);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(LIBNAME));
|
||||
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
|
||||
scanner_path += "update.zip";
|
||||
set_firmware_upgrade(scanner_path);
|
||||
}
|
||||
|
|
|
@ -353,8 +353,8 @@ namespace hg_imgproc
|
|||
HGBase_FreeImg = (SDKHGBase_FreeImage_)dlsym(Dynamicopen_HGBase_pHandle_,"HGBase_DestroyImage");
|
||||
|
||||
#else
|
||||
string scanner_path = hg_log::get_module_full_path("scanner.dll");
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen("scanner.dll"));
|
||||
string scanner_path = hg_log::get_module_full_path(MODULE_NAME_SCANNER);
|
||||
scanner_path = scanner_path.substr(0, scanner_path.size() - strlen(MODULE_NAME_SCANNER));
|
||||
|
||||
string HGImagePrclib_path = scanner_path + IMGPRC_LIBNANE;
|
||||
string HGBaselib_path = scanner_path + HGBASE_LIBNAME;
|
||||
|
|
|
@ -1067,7 +1067,13 @@ scanner_err hg_scanner_mgr::hg_scanner_start(scanner_handle h, void* async_event
|
|||
}
|
||||
scanner_err hg_scanner_mgr::hg_scanner_stop(scanner_handle h)
|
||||
{
|
||||
return (scanner_err)SCAN_PTR(h)->stop();
|
||||
scanner_err err = (scanner_err)SCAN_PTR(h)->stop();
|
||||
|
||||
// call from APP, block when all working-threads stopped - added on 2023-10-18 when handled double-feeding in SANE
|
||||
while (SCAN_PTR(h)->is_running() != hg_scanner::THREAD_RUNNING_IDLE)
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(3));
|
||||
|
||||
return err;
|
||||
}
|
||||
scanner_err hg_scanner_mgr::hg_scanner_get_img_info(scanner_handle h, SANE_Parameters* bmi, long len)
|
||||
{
|
||||
|
|
|
@ -36,7 +36,7 @@ endif()
|
|||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
${PROJECT_SOURCE_DIR}/../../../build/libgdev.a
|
||||
${PROJECT_SOURCE_DIR}/../../../build/libgimgproc.a
|
||||
${PROJECT_SOURCE_DIR}/../../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/liblang.so
|
||||
${PROJECT_SOURCE_DIR}/../../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/libyuyanbao.so
|
||||
${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_imgproc.a
|
||||
${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_imgcodecs.a
|
||||
${PROJECT_SOURCE_DIR}/../3rdparty/opencv/lib/uos/${CMAKE_SYSTEM_PROCESSOR}/libopencv_highgui.a
|
||||
|
|
|
@ -18,7 +18,7 @@ link_directories(${PROJECT_NAME} PRIVATE
|
|||
${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}
|
||||
)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE hgdriver
|
||||
${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/liblang.so
|
||||
${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/libyuyanbao.so
|
||||
${PROJECT_SOURCE_DIR}/../../release/uos/${CMAKE_SYSTEM_PROCESSOR}/libhgdriver.so
|
||||
)
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#if defined(WIN32) || defined(_WIN64)
|
||||
#include "../../../sdk/include/huagao/brand.h"
|
||||
#ifndef HGSCANNER_EXPORT
|
||||
#pragma comment(lib, "scanner.lib")
|
||||
#pragma comment(lib, "scannerqd.lib")
|
||||
#endif
|
||||
#define VERSION_MAJOR VERSION_MAIN
|
||||
#define VERSION_MINOR VERSION_SUB
|
||||
|
|
Loading…
Reference in New Issue