白色背景上的边缘检测白色文档

时间:2019-11-07 11:12:38

标签: android opencv edge-detection

我正在开发一个Android应用程序,用于检测不同的文档。我在白色背景上对白色文档的边缘检测进行了部分处理。该应用程序仅在存在人造光的情况下才能正常工作,但在自然光(早晨)以横向方式进入文档(白色背景上的白色)的情况下,永远无法识别。

在不同的手机和不同的相机之间也会出现相同的问题。例如,它可以与Samsung S10一起使用,而不能与Xiaomi MiA1一起使用。

这是一个真正的原因:

Real Cause Image

在早上进行检测,这是我得到的图像:

After medianBlur and threshold Image

我尝试了此解决方案,但正如之前所说,它仅在某些条件下有效。

avgCorner是一个变量,我在其中保存背景色以使用不同的阈值。

if (avgCorner >= THRESHOLD) {
    // White document on white background
    Imgproc.cvtColor(mat, mGrayMat, Imgproc.COLOR_BGR2HSV, 4);
    List<Mat> mats = new ArrayList<>();
    Core.split(mGrayMat, mats);
    mGrayMat = mats.get(1);
    Imgproc.medianBlur(mGrayMat, mGrayMat, 11);
    Imgproc.threshold(mGrayMat, dst, 5, 255, THRESH_BINARY_INV);
}
else {
    // Dark background
    Imgproc.cvtColor(mat, mGrayMat, Imgproc.COLOR_BGR2GRAY, 4);
    Imgproc.threshold(mGrayMat, dst, 150, 255, THRESH_BINARY + THRESH_OTSU);
}

有人遇到过类似的问题吗?如何实现更通用的实现?如何改善图像捕获或操作?

谢谢。

0 个答案:

没有答案