Introduce ColorMode enum

This commit is contained in:
Pierre-Yves Nicolas
2026-03-29 14:48:16 +02:00
parent 3681d5771d
commit 7d01493477
12 changed files with 47 additions and 33 deletions

View File

@@ -26,7 +26,7 @@ import org.opencv.imgproc.Imgproc
import org.opencv.imgproc.Imgproc.fillConvexPoly
import kotlin.math.roundToInt
fun isColoredDocument(
fun autoColorMode(
img: Mat,
mask: Mask,
quad: Quad,
@@ -34,7 +34,7 @@ fun isColoredDocument(
proportionThreshold: Double = 0.0003,
luminanceMin: Double = 40.0,
luminanceMax: Double = 180.0
): Boolean {
): ColorMode {
// Work on a reasonable size (for correct performance)
val resizedImg = resizeForMaxPixels(img, 1024.0 * 768.0)
@@ -90,10 +90,13 @@ fun isColoredDocument(
restrictedMask.release()
docMask.release()
if (totalPixels == 0) return false
if (totalPixels == 0) return ColorMode.GRAYSCALE
val proportion = coloredPixels.toDouble() / totalPixels.toDouble()
return proportion > proportionThreshold
return if (proportion > proportionThreshold)
ColorMode.COLOR
else
ColorMode.GRAYSCALE
}
private fun chroma(a: Mat, b: Mat): Mat {

View File

@@ -154,7 +154,7 @@ fun extractDocument(
inputMat: Mat,
quad: Quad,
rotationDegrees: Int,
isColored: Boolean,
colorMode: ColorMode,
maxPixels: Long,
): Mat {
val widthTop = norm(quad.topLeft, quad.topRight)
@@ -184,7 +184,7 @@ fun extractDocument(
Imgproc.warpPerspective(inputMat, warped, transform, outputSize)
val resized = resizeForMaxPixels(warped, maxPixels.toDouble())
val enhanced = enhanceCapturedImage(resized, isColored)
val enhanced = enhanceCapturedImage(resized, colorMode)
val rotated = rotate(enhanced, rotationDegrees)
warped.release()

View File

@@ -25,11 +25,15 @@ import org.opencv.imgproc.Imgproc
import kotlin.math.max
import kotlin.math.min
fun enhanceCapturedImage(img: Mat, isColored: Boolean): Mat {
return if (isColored) {
multiScaleRetinexOnL(img)
} else {
enhanceGrayscaleImage(img)
enum class ColorMode {
COLOR,
GRAYSCALE,
}
fun enhanceCapturedImage(img: Mat, colorMode: ColorMode): Mat {
return when (colorMode) {
ColorMode.COLOR -> multiScaleRetinexOnL(img)
ColorMode.GRAYSCALE -> enhanceGrayscaleImage(img)
}
}