react-native-rectangle-doc-scanner 3.231.0 → 3.232.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -104,6 +104,7 @@ class DocumentDetector {
|
|
|
104
104
|
val grayMat = Mat()
|
|
105
105
|
val blurredMat = Mat()
|
|
106
106
|
val cannyMat = Mat()
|
|
107
|
+
val morphMat = Mat()
|
|
107
108
|
|
|
108
109
|
try {
|
|
109
110
|
// Convert to grayscale
|
|
@@ -113,17 +114,20 @@ class DocumentDetector {
|
|
|
113
114
|
srcMat.copyTo(grayMat)
|
|
114
115
|
}
|
|
115
116
|
|
|
116
|
-
// Apply
|
|
117
|
-
Imgproc.GaussianBlur(grayMat, blurredMat, Size(
|
|
117
|
+
// Apply a light blur to reduce noise without killing small edges.
|
|
118
|
+
Imgproc.GaussianBlur(grayMat, blurredMat, Size(3.0, 3.0), 0.0)
|
|
118
119
|
|
|
119
|
-
// Apply Canny edge detection
|
|
120
|
-
Imgproc.Canny(blurredMat, cannyMat,
|
|
120
|
+
// Apply Canny edge detection with slightly lower thresholds for small documents.
|
|
121
|
+
Imgproc.Canny(blurredMat, cannyMat, 50.0, 150.0)
|
|
122
|
+
val kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, Size(3.0, 3.0))
|
|
123
|
+
Imgproc.morphologyEx(cannyMat, morphMat, Imgproc.MORPH_CLOSE, kernel)
|
|
124
|
+
kernel.release()
|
|
121
125
|
|
|
122
126
|
// Find contours
|
|
123
127
|
val contours = mutableListOf<MatOfPoint>()
|
|
124
128
|
val hierarchy = Mat()
|
|
125
129
|
Imgproc.findContours(
|
|
126
|
-
|
|
130
|
+
morphMat,
|
|
127
131
|
contours,
|
|
128
132
|
hierarchy,
|
|
129
133
|
Imgproc.RETR_EXTERNAL,
|
|
@@ -133,12 +137,13 @@ class DocumentDetector {
|
|
|
133
137
|
// Find the largest contour that approximates to a quadrilateral
|
|
134
138
|
var largestRectangle: Rectangle? = null
|
|
135
139
|
var largestArea = 0.0
|
|
140
|
+
val minArea = max(1000.0, (srcMat.rows() * srcMat.cols()) * 0.002)
|
|
136
141
|
|
|
137
142
|
for (contour in contours) {
|
|
138
143
|
val contourArea = Imgproc.contourArea(contour)
|
|
139
144
|
|
|
140
145
|
// Filter small contours
|
|
141
|
-
if (contourArea <
|
|
146
|
+
if (contourArea < minArea) continue
|
|
142
147
|
|
|
143
148
|
// Approximate contour to polygon
|
|
144
149
|
val approx = MatOfPoint2f()
|
|
@@ -168,6 +173,7 @@ class DocumentDetector {
|
|
|
168
173
|
grayMat.release()
|
|
169
174
|
blurredMat.release()
|
|
170
175
|
cannyMat.release()
|
|
176
|
+
morphMat.release()
|
|
171
177
|
}
|
|
172
178
|
}
|
|
173
179
|
|
package/package.json
CHANGED