From 38ce8627a5650365d1b665fcc14d7197247e290c Mon Sep 17 00:00:00 2001 From: sinvo Date: Thu, 19 Mar 2026 17:29:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=BC=E5=90=88=E4=BC=98=E5=8C=96=EF=BC=9Aga?= =?UTF-8?q?mma=3D2.2=E4=BF=9D=E7=95=99=E5=B1=82=E6=AC=A1=20+=20=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E8=8C=83=E5=9B=B4=E5=8E=8B=E5=88=B00-200=E5=8A=A0?= =?UTF-8?q?=E6=B7=B1=E6=96=87=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gamma从2.5降到2.2(避免过度压暗糊成团),同时把输出范围 从0-255压缩到0-200,等效于整体加深20%,文字更黑但笔画 间灰度差异按比例保留。 Co-Authored-By: Claude Opus 4.6 --- CamScanner.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/CamScanner.cs b/CamScanner.cs index 6542917..5e95797 100644 --- a/CamScanner.cs +++ b/CamScanner.cs @@ -367,15 +367,20 @@ public static class DocumentScanner Marshal.Copy(resultData, 0, normU8.Data, resultData.Length); // --- d: 非线性对比度增强 --- - // 用 gamma 曲线代替线性分段,保留文字笔画间的灰度层次 - // gamma > 1:中间调压暗(文字变黑),但保留灰度渐变不糊成一团 + // gamma 曲线压暗 + 线性拉伸加深,两步结合: + // gamma 保留笔画间灰度层次 + // 线性拉伸让文字整体更黑 byte[] lut = new byte[256]; for (int i = 0; i < 256; i++) { double x = i / 255.0; - // gamma=2.5 让文字明显变黑,但笔画间灰度差异保留 - double y = Math.Pow(x, 2.5); - lut[i] = (byte)Math.Min(255, Math.Max(0, (int)(y * 255.0))); + // gamma=2.2 压暗 + double y = Math.Pow(x, 2.2); + // 再做线性拉伸:输出范围压缩到 0-200,之后白底清理会把200+推白 + // 这样文字更黑但笔画间差异按比例保留 + int val = (int)(y * 200.0); + if (val > 255) val = 255; + lut[i] = (byte)val; } Mat lutMat = new Mat(1, 256, MatType.CV_8U, lut); Mat contrasted = new Mat();