调整畸变流程
This commit is contained in:
parent
f70e5d1e93
commit
c075cea1d0
|
@ -5,6 +5,9 @@ int CISTestImageProcess::test(const cv::Mat& image, CISTestResult& result)
|
||||||
//std::vector<cv::RotatedRect> marks;
|
//std::vector<cv::RotatedRect> marks;
|
||||||
//int res = findMarks(image, marks);
|
//int res = findMarks(image, marks);
|
||||||
//return res;
|
//return res;
|
||||||
|
result.scaleXY1 = -1;
|
||||||
|
result.scaleXY2 = -1;
|
||||||
|
result.scaleXY3 = -1;
|
||||||
|
|
||||||
if (image.channels() != 3)
|
if (image.channels() != 3)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -20,15 +23,17 @@ int CISTestImageProcess::test(const cv::Mat& image, CISTestResult& result)
|
||||||
//cv::imwrite("range1.jpg", mask_s);
|
//cv::imwrite("range1.jpg", mask_s);
|
||||||
cv::inRange(hsv_channels[0], 0, 84, range_h); //饱和度在[220, 255]的像素
|
cv::inRange(hsv_channels[0], 0, 84, range_h); //饱和度在[220, 255]的像素
|
||||||
cv::inRange(hsv_channels[0], 213, 255, range_temp); //饱和度在[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 &= mask_s;
|
||||||
range_h |= range_temp & mask_s;
|
range_h |= range_temp & mask_s;
|
||||||
|
//cv::imwrite("range3.jpg", range_h);
|
||||||
findEllipse(range_h, result.scaleXY1);
|
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;
|
range_h &= mask_s;
|
||||||
|
//cv::imwrite("range4.jpg", range_h);
|
||||||
findEllipse(range_h, result.scaleXY2);
|
findEllipse(range_h, result.scaleXY2);
|
||||||
cv::inRange(hsv_channels[0], 128, 213, range_h); //饱和度在[220, 255]的像素
|
cv::inRange(hsv_channels[0], 128, 213, range_h); //饱和度在[220, 255]的像素
|
||||||
range_h &= mask_s;
|
range_h &= mask_s;
|
||||||
|
//cv::imwrite("range5.jpg", range_h);
|
||||||
findEllipse(range_h, result.scaleXY3);
|
findEllipse(range_h, result.scaleXY3);
|
||||||
|
|
||||||
return 0;
|
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.width = box.size.height;
|
||||||
box.size.height = temp;
|
box.size.height = temp;
|
||||||
}
|
}
|
||||||
areaThre = box.size.width / box.size.height;
|
scale_xy = box.size.width / box.size.height;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -945,12 +945,22 @@ void hg_scanner::thread_handle_image_process(void)
|
||||||
break;
|
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 (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
VLOG_MINI_1(LOG_LEVEL_FATAL, "FATAL: Insufficient memory when proecss image with %d bytes.\n", tiny_buffer->size());
|
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_fatal_ = SCANNER_ERR_INSUFFICIENT_MEMORY;
|
||||||
stop();
|
stop();
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1044,6 +1054,9 @@ void hg_scanner::working_done(void*)
|
||||||
case SCANNER_ERR_DEVICE_AUTO_FAIL_OVER:
|
case SCANNER_ERR_DEVICE_AUTO_FAIL_OVER:
|
||||||
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_AUTO_FAIL_OVER, SANE_EVENT_SCAN_FINISHED, status_);
|
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_AUTO_FAIL_OVER, SANE_EVENT_SCAN_FINISHED, status_);
|
||||||
break;
|
break;
|
||||||
|
case SCANNER_ERR_DEVICE_DISTORTION:
|
||||||
|
notify_ui_working_status(STATU_DESC_SCANNER_ERR_DEVICE_DISTORTION, SANE_EVENT_SCAN_FINISHED, status_);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
notify_ui_working_status(user_cancel_ ? STATU_DESC_SCAN_CANCELED : STATU_DESC_SCAN_STOPPED, SANE_EVENT_SCAN_FINISHED, status_);
|
notify_ui_working_status(user_cancel_ ? STATU_DESC_SCAN_CANCELED : STATU_DESC_SCAN_STOPPED, SANE_EVENT_SCAN_FINISHED, status_);
|
||||||
break;
|
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_OMIT_EMPTY_RECEIPT
|
||||||
|| image_prc_param_.bits.page == PAGE_FOLIO);
|
|| 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.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;
|
ic.pixtype = image_prc_param_.bits.color_mode == COLOR_MODE_AUTO_MATCH ? 2 : image_prc_param_.bits.color_mode;
|
||||||
|
|
|
@ -841,7 +841,7 @@ int hg_scanner_300::set_dpi_color_check_val(void)
|
||||||
{
|
{
|
||||||
int ret = SCANNER_ERR_OK,
|
int ret = SCANNER_ERR_OK,
|
||||||
len = 0;
|
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);
|
len = sizeof(usbcb);
|
||||||
io_->write_bulk(&usbcb, &len);
|
io_->write_bulk(&usbcb, &len);
|
||||||
|
|
||||||
|
|
|
@ -520,7 +520,7 @@ namespace hg_imgproc
|
||||||
rmc = cv::IMREAD_COLOR;
|
rmc = cv::IMREAD_COLOR;
|
||||||
}
|
}
|
||||||
cv::Mat mat(cv::imdecode(*buf, rmc));
|
cv::Mat mat(cv::imdecode(*buf, rmc));
|
||||||
//cv::imwrite("1.jpg",mat);
|
//cv::imwrite("imdecode.jpg",mat);
|
||||||
|
|
||||||
if (mat.empty())
|
if (mat.empty())
|
||||||
{
|
{
|
||||||
|
@ -1307,12 +1307,15 @@ namespace hg_imgproc
|
||||||
|
|
||||||
for (size_t i = 0; i < mats.size(); ++i)
|
for (size_t i = 0; i < mats.size(); ++i)
|
||||||
{
|
{
|
||||||
CISTestImageProcess::CISTestResult r;
|
//cv::imwrite(to_string(i) + "cis_test_image.jpg", mats[i]);
|
||||||
CISTestImageProcess::test(mats[i], r);
|
|
||||||
|
CISTestImageProcess::test(mats[i], res);
|
||||||
mats_.push_back(mats[i]);
|
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)
|
HGImage opencv_to_hgbase_image(const cv::Mat& mats)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue