24
24
import android .view .View ;
25
25
import android .view .ViewGroup ;
26
26
import android .view .WindowManager ;
27
- import android .webkit .WebView ;
28
27
import android .widget .FrameLayout ;
29
28
30
29
import org .apache .cordova .CallbackContext ;
50
49
import org .opencv .core .Point ;
51
50
import org .opencv .core .Scalar ;
52
51
import org .opencv .core .Size ;
53
- import org .opencv .features2d .DMatch ;
52
+ import org .opencv .core .DMatch ;
54
53
import org .opencv .features2d .DescriptorExtractor ;
55
54
import org .opencv .features2d .DescriptorMatcher ;
56
55
import org .opencv .features2d .FeatureDetector ;
57
56
import org .opencv .features2d .Features2d ;
58
- import org .opencv .features2d .KeyPoint ;
59
- import org .opencv .highgui . Highgui ;
57
+ import org .opencv .core .KeyPoint ;
58
+ import org .opencv .imgcodecs . Imgcodecs ;
60
59
import org .opencv .imgproc .Imgproc ;
61
60
62
61
import java .util .ArrayList ;
@@ -120,10 +119,10 @@ public int getHeight(Object obj) {
120
119
}
121
120
}
122
121
123
- @ SuppressWarnings ("deprecation" )
124
122
@ Override
125
123
public void initialize (CordovaInterface cordova , CordovaWebView webView ) {
126
124
activity = cordova .getActivity ();
125
+
127
126
super .initialize (cordova , webView );
128
127
129
128
mLoaderCallback = new BaseLoaderCallback (activity ) {
@@ -314,7 +313,7 @@ public void onResume(boolean multitasking) {
314
313
super .onResume (multitasking );
315
314
if (!OpenCVLoader .initDebug ()) {
316
315
Log .d (TAG , "Internal OpenCV library not found. Using OpenCV Manager for initialization" );
317
- OpenCVLoader .initAsync (OpenCVLoader .OPENCV_VERSION_2_4_11 , activity , mLoaderCallback );
316
+ OpenCVLoader .initAsync (OpenCVLoader .OPENCV_VERSION_3_1_0 , activity , mLoaderCallback );
318
317
} else {
319
318
Log .d (TAG , "OpenCV library found inside package. Using it!" );
320
319
mLoaderCallback .onManagerConnected (LoaderCallbackInterface .SUCCESS );
@@ -611,7 +610,7 @@ public void run() {
611
610
if (save_files ) {
612
611
if (count % 10 == 0 ) {
613
612
String extStorageDirectory = Environment .getExternalStorageDirectory ().toString ();
614
- Highgui .imwrite (extStorageDirectory + "/pic" + count + ".png" , gray );
613
+ Imgcodecs .imwrite (extStorageDirectory + "/pic" + count + ".png" , gray );
615
614
Log .i ("### FILE ###" , "File saved to " + extStorageDirectory + "/pic" + count + ".png" );
616
615
}
617
616
count ++;
@@ -699,22 +698,53 @@ public void run() {
699
698
Mat H = Calib3d .findHomography (obj , scene , Calib3d .RANSAC , 5 );
700
699
701
700
boolean result = true ;
702
- double det = H .get (0 , 0 )[0 ] * H .get (1 , 1 )[0 ] - H .get (1 , 0 )[0 ] * H .get (0 , 1 )[0 ];
703
- if (det < 0 ) {
704
- result = false ;
705
- }
706
- double N1 = Math .sqrt (H .get (0 , 0 )[0 ] * H .get (0 , 0 )[0 ] + H .get (1 , 0 )[0 ] * H .get (1 , 0 )[0 ]);
707
- if (N1 > 4 || N1 < 0.1 ) {
708
- result = false ;
709
- }
710
701
711
- double N2 = Math .sqrt (H .get (0 , 1 )[0 ] * H .get (0 , 1 )[0 ] + H .get (1 , 1 )[0 ] * H .get (1 , 1 )[0 ]);
712
- if (N2 > 4 || N2 < 0.1 ) {
713
- result = false ;
714
- }
702
+ double det = 0 , N1 = 0 , N2 = 0 , N3 = 0 ;
703
+
704
+ if (H != null ) {
705
+ double [] p1 = H .get (0 , 0 );
706
+ double [] p2 = H .get (1 , 1 );
707
+ double [] p3 = H .get (1 , 0 );
708
+ double [] p4 = H .get (0 , 1 );
709
+ double [] p5 = H .get (2 , 0 );
710
+ double [] p6 = H .get (2 , 1 );
711
+
712
+ if (p1 != null && p2 != null && p3 != null && p4 != null ) {
713
+ det = p1 [0 ] * p2 [0 ] - p3 [0 ] * p4 [0 ];
714
+ if (det < 0 ) {
715
+ result = false ;
716
+ }
717
+ } else {
718
+ result = false ;
719
+ }
720
+
721
+ if (p1 != null && p3 != null ) {
722
+ N1 = Math .sqrt (p1 [0 ] * p1 [0 ] + p3 [0 ] * p3 [0 ]);
723
+ if (N1 > 4 || N1 < 0.1 ) {
724
+ result = false ;
725
+ }
726
+ } else {
727
+ result = false ;
728
+ }
729
+
730
+ if (p2 != null && p4 != null ) {
731
+ N2 = Math .sqrt (p4 [0 ] * p4 [0 ] + p2 [0 ] * p2 [0 ]);
732
+ if (N2 > 4 || N2 < 0.1 ) {
733
+ result = false ;
734
+ }
735
+ } else {
736
+ result = false ;
737
+ }
715
738
716
- double N3 = Math .sqrt (H .get (2 , 0 )[0 ] * H .get (2 , 0 )[0 ] + H .get (2 , 1 )[0 ] * H .get (2 , 1 )[0 ]);
717
- if (N3 > 0.002 ) {
739
+ if (p5 != null && p6 != null ) {
740
+ N3 = Math .sqrt (p5 [0 ] * p5 [0 ] + p6 [0 ] * p6 [0 ]);
741
+ if (N3 > 0.002 ) {
742
+ result = false ;
743
+ }
744
+ } else {
745
+ result = false ;
746
+ }
747
+ } else {
718
748
result = false ;
719
749
}
720
750
@@ -729,22 +759,24 @@ public void run() {
729
759
Mat obj_corners = new Mat (4 , 1 , CvType .CV_32FC2 );
730
760
Mat scene_corners = new Mat (4 , 1 , CvType .CV_32FC2 );
731
761
732
- obj_corners .put (0 , 0 , new double []{ 0 , 0 } );
733
- obj_corners .put (1 , 0 , new double []{ pattern .cols (), 0 } );
734
- obj_corners .put (2 , 0 , new double []{ pattern .cols (), pattern .rows ()} );
735
- obj_corners .put (3 , 0 , new double []{ 0 , pattern .rows ()} );
762
+ obj_corners .put (0 , 0 , 0 , 0 );
763
+ obj_corners .put (1 , 0 , pattern .cols (), 0 );
764
+ obj_corners .put (2 , 0 , pattern .cols (), pattern .rows ());
765
+ obj_corners .put (3 , 0 , 0 , pattern .rows ());
736
766
737
767
Core .perspectiveTransform (obj_corners , scene_corners , H );
738
768
739
- Core .line (img_matches , new Point (scene_corners .get (0 , 0 )), new Point (scene_corners .get (1 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
740
- Core .line (img_matches , new Point (scene_corners .get (1 , 0 )), new Point (scene_corners .get (2 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
741
- Core .line (img_matches , new Point (scene_corners .get (2 , 0 )), new Point (scene_corners .get (3 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
742
- Core .line (img_matches , new Point (scene_corners .get (3 , 0 )), new Point (scene_corners .get (0 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
769
+ Imgproc .line (img_matches , new Point (scene_corners .get (0 , 0 )), new Point (scene_corners .get (1 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
770
+ Imgproc .line (img_matches , new Point (scene_corners .get (1 , 0 )), new Point (scene_corners .get (2 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
771
+ Imgproc .line (img_matches , new Point (scene_corners .get (2 , 0 )), new Point (scene_corners .get (3 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
772
+ Imgproc .line (img_matches , new Point (scene_corners .get (3 , 0 )), new Point (scene_corners .get (0 , 0 )), new Scalar (0 , 255 , 0 ), 4 );
743
773
}
744
774
} else {
745
775
updateState (false );
746
776
}
747
- H .release ();
777
+ if (H != null ) {
778
+ H .release ();
779
+ }
748
780
}
749
781
}
750
782
gray .release ();
@@ -773,11 +805,10 @@ private void setBase64Pattern(String image_base64) {
773
805
//Imgproc.equalizeHist(pattern, pattern);
774
806
775
807
if (save_files ) {
776
- Bitmap bmp = scaled ;
777
- Utils .matToBitmap (pattern , bmp );
808
+ Utils .matToBitmap (pattern , scaled );
778
809
String extStorageDirectory = Environment .getExternalStorageDirectory ().toString ();
779
810
int num = (int ) (Math .random () * 10001 );
780
- Highgui .imwrite (extStorageDirectory + "/pic" + num + ".png" , pattern );
811
+ Imgcodecs .imwrite (extStorageDirectory + "/pic" + num + ".png" , pattern );
781
812
Log .i ("### FILE ###" , "File saved to " + extStorageDirectory + "/pic" + num + ".png" );
782
813
}
783
814
0 commit comments