diff --git a/hgdriver/ImageProcess/CISTestImageProcess.cpp b/hgdriver/ImageProcess/CISTestImageProcess.cpp index 07ef642..c43702b 100644 --- a/hgdriver/ImageProcess/CISTestImageProcess.cpp +++ b/hgdriver/ImageProcess/CISTestImageProcess.cpp @@ -5,6 +5,9 @@ int CISTestImageProcess::test(const cv::Mat& image, CISTestResult& result) //std::vector marks; //int res = findMarks(image, marks); //return res; + result.scaleXY1 = -1; + result.scaleXY2 = -1; + result.scaleXY3 = -1; if (image.channels() != 3) return -1; @@ -20,15 +23,17 @@ int CISTestImageProcess::test(const cv::Mat& image, CISTestResult& result) //cv::imwrite("range1.jpg", mask_s); cv::inRange(hsv_channels[0], 0, 84, range_h); //饱和度在[220, 255]的像素 cv::inRange(hsv_channels[0], 213, 255, range_temp); //饱和度在[220, 255]的像素 - //cv::imwrite("range3.jpg", range_temp); range_h &= mask_s; range_h |= range_temp & mask_s; + //cv::imwrite("range3.jpg", range_h); findEllipse(range_h, result.scaleXY1); - cv::inRange(hsv_channels[0], 42, 170, range_h); //饱和度在[220, 255]的像素 + cv::inRange(hsv_channels[0], 30, 150, range_h); //饱和度在[220, 255]的像素 range_h &= mask_s; + //cv::imwrite("range4.jpg", range_h); findEllipse(range_h, result.scaleXY2); cv::inRange(hsv_channels[0], 128, 213, range_h); //饱和度在[220, 255]的像素 range_h &= mask_s; + //cv::imwrite("range5.jpg", range_h); findEllipse(range_h, result.scaleXY3); return 0; @@ -208,6 +213,6 @@ int CISTestImageProcess::findEllipse(const cv::Mat& image, double& scale_xy, dou box.size.width = box.size.height; box.size.height = temp; } - areaThre = box.size.width / box.size.height; + scale_xy = box.size.width / box.size.height; return 0; } diff --git a/hgdriver/hgdev/hg_scanner.cpp b/hgdriver/hgdev/hg_scanner.cpp index 1b3580c..46da302 100644 --- a/hgdriver/hgdev/hg_scanner.cpp +++ b/hgdriver/hgdev/hg_scanner.cpp @@ -945,12 +945,22 @@ void hg_scanner::thread_handle_image_process(void) break; } } + catch (const std::exception& e) + { + if (is_dpi_color_check) + stop_fatal_ = SCANNER_ERR_DEVICE_DISTORTION; + else + stop_fatal_ = SCANNER_ERR_INSUFFICIENT_MEMORY; + VLOG_MINI_1(LOG_LEVEL_ALL, "is opencv Fatal: %s\n", e.what()); + stop(); + break; + + } catch (...) { VLOG_MINI_1(LOG_LEVEL_FATAL, "FATAL: Insufficient memory when proecss image with %d bytes.\n", tiny_buffer->size()); stop_fatal_ = SCANNER_ERR_INSUFFICIENT_MEMORY; stop(); - break; } } else @@ -1044,6 +1054,9 @@ void hg_scanner::working_done(void*) case SCANNER_ERR_DEVICE_AUTO_FAIL_OVER: notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_AUTO_FAIL_OVER, SANE_EVENT_SCAN_FINISHED, status_); break; + case SCANNER_ERR_DEVICE_DISTORTION: + notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_DISTORTION, SANE_EVENT_SCAN_FINISHED, status_); + break; default: notify_ui_working_status(user_cancel_ ? STATU_DESC_SCAN_CANCELED : STATU_DESC_SCAN_STOPPED, SANE_EVENT_SCAN_FINISHED, status_); break; @@ -3819,6 +3832,10 @@ int hg_scanner::image_configuration(SCANCONF& ic) || image_prc_param_.bits.page == PAGE_OMIT_EMPTY_RECEIPT || image_prc_param_.bits.page == PAGE_FOLIO); + if (is_dpi_color_check) + { + ic.is_duplex = false; + } ic.en_fold = (image_prc_param_.bits.page == PAGE_FOLIO); ic.pixtype = image_prc_param_.bits.color_mode == COLOR_MODE_AUTO_MATCH ? 2 : image_prc_param_.bits.color_mode; diff --git a/hgdriver/hgdev/hg_scanner_300.cpp b/hgdriver/hgdev/hg_scanner_300.cpp index c7ab8d8..049e77d 100644 --- a/hgdriver/hgdev/hg_scanner_300.cpp +++ b/hgdriver/hgdev/hg_scanner_300.cpp @@ -841,7 +841,7 @@ int hg_scanner_300::set_dpi_color_check_val(void) { int ret = SCANNER_ERR_OK, len = 0; - USBCB usbcb = { setting3288dsp::SET_JUST_COF_H ,1,resolution_ }; + USBCB usbcb = { setting3288dsp::SET_JUST_COF_V ,save_dpi_color_check_val,resolution_ }; len = sizeof(usbcb); io_->write_bulk(&usbcb, &len); diff --git a/hgdriver/hgdev/image_process.cpp b/hgdriver/hgdev/image_process.cpp index eeb77c6..29c1e07 100644 --- a/hgdriver/hgdev/image_process.cpp +++ b/hgdriver/hgdev/image_process.cpp @@ -520,7 +520,7 @@ namespace hg_imgproc rmc = cv::IMREAD_COLOR; } cv::Mat mat(cv::imdecode(*buf, rmc)); - //cv::imwrite("1.jpg",mat); + //cv::imwrite("imdecode.jpg",mat); if (mat.empty()) { @@ -1307,12 +1307,15 @@ namespace hg_imgproc for (size_t i = 0; i < mats.size(); ++i) { - CISTestImageProcess::CISTestResult r; - CISTestImageProcess::test(mats[i], r); + //cv::imwrite(to_string(i) + "cis_test_image.jpg", mats[i]); + + CISTestImageProcess::test(mats[i], res); mats_.push_back(mats[i]); - /*cv::imwrite("1.jpg",mats[i]);*/ + //cv::imwrite("CISTestImageProcess.jpg",mats[i]); + return ret; + } - return ret; + } HGImage opencv_to_hgbase_image(const cv::Mat& mats) {