我正在开发一个Android应用程序,用于检测不同的文档。我在白色背景上对白色文档的边缘检测进行了部分处理。该应用程序仅在存在人造光的情况下才能正常工作,但在自然光(早晨)以横向方式进入文档(白色背景上的白色)的情况下,永远无法识别。
在不同的手机和不同的相机之间也会出现相同的问题。例如,它可以与Samsung S10一起使用,而不能与Xiaomi MiA1一起使用。
这是一个真正的原因:
在早上进行检测,这是我得到的图像:
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);
}
有人遇到过类似的问题吗?如何实现更通用的实现?如何改善图像捕获或操作?
谢谢。