更新跳过空白页算法v1.10,优化算法效能

This commit is contained in:
yangjiaxuan 2023-12-11 11:28:53 +08:00
parent b0274c4b31
commit f3a06285ff
2 changed files with 48 additions and 36 deletions

View File

@ -33,28 +33,38 @@ void CImageApplyDiscardBlank::apply(std::vector<cv::Mat>& mats, bool isTwoSide)
}
}
bool maxMinCompare(const cv::Mat& img, const cv::Mat& mask, double devTh, double meanTh)
bool maxMinCompare(const cv::Mat& img, const cv::Mat& mask, double devTh, double bgc)
{
double min, max;
cv::minMaxLoc(img, &min, &max, 0, 0, mask);
if (cv::mean(img, mask)[0] < meanTh)
return false;
return (max - min) < devTh;
return abs(max - bgc) < devTh && abs(min - bgc) < devTh;
}
static int a = 0;
bool CImageApplyDiscardBlank::apply(const cv::Mat& pDib, double threshold, int edge, double devTh, double meanTh, int dilate)
{
if (pDib.empty())
return true;
double resizeScale = 1.0;
while (pDib.cols * resizeScale > 400)
while ((pDib.cols * resizeScale > 500) && (pDib.rows * resizeScale > 500))
resizeScale /= 2;
cv::Mat img_resize;
cv::resize(pDib, img_resize, cv::Size(), resizeScale, resizeScale, cv::INTER_LINEAR);
cv::blur(img_resize, img_resize, cv::Size(3, 3));
//cv::imwrite("img_resize.jpg", img_resize);
//cv::dilate(img_resize, img_resize, cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(dilate, dilate)));
cv::blur(img_resize, img_resize, cv::Size(dilate, dilate));
cv::Scalar bgc = hg::getBackGroundColor(img_resize, cv::Mat(), 20);
if (pDib.channels() == 3)
if ((bgc[0] + bgc[1] + bgc[2]) < meanTh * 3)
return false;
if (pDib.channels() == 1)
if (bgc[0] < meanTh )
return false;
//cv::imwrite(std::to_string(a) + "r.jpg", img_resize);
cv::Mat threshold_img;
if (img_resize.channels() == 3)
{
@ -74,19 +84,20 @@ bool CImageApplyDiscardBlank::apply(const cv::Mat& pDib, double threshold, int e
contour.push_back(p);
cv::RotatedRect rect = hg::getBoundingRect(contour);
rect.size = cv::Size2f(rect.size.width - edge * resizeScale, rect.size.height - edge * resizeScale);
rect.size = cv::Size2f(rect.size.width - edge * resizeScale * 2, rect.size.height - edge * resizeScale * 2);
cv::Point2f box[4];
rect.points(box);
contour.clear();
contours.clear();
for (size_t i = 0; i < 4; i++)
contour.push_back(box[i]);
contours.push_back(contour);
cv::Mat mask = cv::Mat::zeros(img_resize.size(), CV_8UC1);
hg::fillPolys(mask, contours, cv::Scalar::all(255));
//cv::imwrite("mask.jpg", mask);
//cv::imwrite(std::to_string(a) + "m.jpg", mask);
a++;
bool b = true;
if (img_resize.channels() == 3)
{
@ -94,11 +105,11 @@ bool CImageApplyDiscardBlank::apply(const cv::Mat& pDib, double threshold, int e
cv::split(img_resize, bgr);
for (size_t i = 0; i < 3; i++)
{
b &= maxMinCompare(bgr[i], mask, devTh, meanTh);
b &= maxMinCompare(bgr[i], mask, devTh, bgc[i]);
if (!b) break;
}
}
else
b &= maxMinCompare(img_resize, mask, devTh, meanTh);
b &= maxMinCompare(img_resize, mask, devTh, bgc[0]);
return b;
}

View File

@ -5,29 +5,30 @@
*
* 2020/4/21
* 2020/4/21 v1.0
2020/8/12 v1.1 setIntensity和setMinAreaisNormal标识位setIntensity的设置范围[2, 20][1, 100]
2020/8/25 v1.1.1 10020
2020/10/16 v1.2 便
2020/10/19 v1.2.1 BUG
2021/04/13 v1.3.0 /
2021/08/12 v1.3.1 opencv版本导致计算结果存在差异的代码
2021/12/14 v1.3.2
2021/12/15 v1.3.3
2021/12/17 v1.3.4
2022/09/07 v1.3.5 BUG
2022/09/19 v1.4
2022/09/19 v1.4.1
2022/11/18 v1.4.2
2022/11/29 v1.5
2022/12/03 v1.5.1
2023/10/12 v1.6 JEPG文件大小判断是否为空白页
2023/10/20 v1.6.1 JPEG文件大小判断空白页
2023/10/30 v1.7 JPEG文件大小判断空白页的算法接口
2023/11/04 v1.7.1 PNG二值化文件大小判断空白页的选项
2023/12/01 v1.8 JPEG/PNG文件大小判断空白页方案
2023/12/04 v1.9
2023/12/05 v1.9.1
* v1.9.1
2020/8/12 v1.1 setIntensity和setMinAreaisNormal标识位setIntensity的设置范围[2, 20][1, 100]
2020/8/25 v1.1.1 10020
2020/10/16 v1.2 便
2020/10/19 v1.2.1 BUG
2021/04/13 v1.3.0 /
2021/08/12 v1.3.1 opencv版本导致计算结果存在差异的代码
2021/12/14 v1.3.2
2021/12/15 v1.3.3
2021/12/17 v1.3.4
2022/09/07 v1.3.5 BUG
2022/09/19 v1.4
2022/09/19 v1.4.1
2022/11/18 v1.4.2
2022/11/29 v1.5
2022/12/03 v1.5.1
2023/10/12 v1.6 JEPG文件大小判断是否为空白页
2023/10/20 v1.6.1 JPEG文件大小判断空白页
2023/10/30 v1.7 JPEG文件大小判断空白页的算法接口
2023/11/04 v1.7.1 PNG二值化文件大小判断空白页的选项
2023/12/01 v1.8 JPEG/PNG文件大小判断空白页方案
2023/12/04 v1.9
2023/12/05 v1.9.1
2023/12/08 v1.10 mask精度bug
* v1.10
* ====================================================
*/