From 6b443987761ca3a5bd75be4c61c8b80409288eff Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 8 Nov 2018 15:28:32 +0200 Subject: Applied Homography test. --- .../app/src/main/cpp/native-lib.cpp | 32 +++++++++++++++++++--- .../com/twine/colorcapturetest/CameraPreview.java | 16 +++++++++-- .../com/twine/colorcapturetest/MainActivity.java | 3 +- .../app/src/main/res/layout/activity_main.xml | 14 ++++++++-- 4 files changed, 55 insertions(+), 10 deletions(-) (limited to 'Software/Android_Studio') diff --git a/Software/Android_Studio/ColorCaptureTest/app/src/main/cpp/native-lib.cpp b/Software/Android_Studio/ColorCaptureTest/app/src/main/cpp/native-lib.cpp index 79458e499..b935925c6 100644 --- a/Software/Android_Studio/ColorCaptureTest/app/src/main/cpp/native-lib.cpp +++ b/Software/Android_Studio/ColorCaptureTest/app/src/main/cpp/native-lib.cpp @@ -4,6 +4,7 @@ #include #include #include +#include using namespace cv; @@ -42,12 +43,16 @@ extern "C" JNIEXPORT jboolean JNICALL Java_com_twine_colorcapturetest_CameraPreview_ImageProcessing( JNIEnv *env, jobject instance, jint width, jint height, jbyteArray NV21FrameData, - jintArray outPixels) { + jintArray outPixels,jintArray wrapedOutPixels) +{ jbyte *pNV21FrameData = env->GetByteArrayElements(NV21FrameData, 0); jint *poutPixels = env->GetIntArrayElements(outPixels, 0); + jint *pwrapedPixels = env->GetIntArrayElements(wrapedOutPixels, 0); //// + jboolean has_result = false; + try { ColorCaptureLib capture; @@ -60,6 +65,18 @@ Java_com_twine_colorcapturetest_CameraPreview_ImageProcessing( Mat result(width, height, CV_8UC4, (unsigned char *) poutPixels); cvtColor(yuv, rgb, COLOR_YUV2RGB_NV21); + Mat gray; + Mat dst; + cvtColor(rgb, gray, CV_RGB2GRAY); + cv::Laplacian(gray, dst, CV_64F); + + cv::Scalar mu, sigma; + cv::meanStdDev(dst, mu, sigma); + + double focusMeasure = sigma.val[0] * sigma.val[0]; + + __android_log_print(ANDROID_LOG_ERROR, "FOCUS", "\n Focus measure is %f \n", focusMeasure); + rot90(rgb,ROTATE_180DEG); //resize(src, dst, dst.size(), 0, 0, interpolation); @@ -68,7 +85,7 @@ Java_com_twine_colorcapturetest_CameraPreview_ImageProcessing( Mat rot_mat = getRotationMatrix2D(src_center, -90, 1.0); warpAffine(rgb, rgb, rot_mat, rgb.size());*/ - vector vertices = capture.GetArcusVertices(rgb); + vector vertices = capture.GetQRVertices4(rgb); for (size_t i = 0; i < vertices.size(); i++) { circle(rgb, vertices[i], 2, CV_RGB(0, 0, 255), -1); @@ -77,8 +94,14 @@ Java_com_twine_colorcapturetest_CameraPreview_ImageProcessing( int w = 330; int h = 300; + Mat wraped(h,w,CV_8UC4, (unsigned char *) pwrapedPixels); + if (vertices.size() == 4) { - //capture.ApplyHomography(rgb, vertices, Size(w, h)); + + has_result = jboolean(true); + + Mat m = capture.ApplyHomography(rgb, vertices, Size(w, h)); + cvtColor(m, wraped, COLOR_RGB2BGRA); //BhBlocks b(image, w / columns, h / rows); //b.drawBlocks(image, Scalar(0, 0, 0), 1); } @@ -109,10 +132,11 @@ Java_com_twine_colorcapturetest_CameraPreview_ImageProcessing( env->ReleaseByteArrayElements(NV21FrameData, pNV21FrameData, 0); env->ReleaseIntArrayElements(outPixels, poutPixels, 0); + env->ReleaseIntArrayElements(wrapedOutPixels, pwrapedPixels, 0); } catch (Exception ex) { env->ThrowNew(env->FindClass("java/lang/NullPointerException"), ex.what()); } - return static_cast(true); + return has_result; } \ No newline at end of file diff --git a/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/CameraPreview.java b/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/CameraPreview.java index e8452c750..210bb46c1 100644 --- a/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/CameraPreview.java +++ b/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/CameraPreview.java @@ -28,8 +28,11 @@ public class CameraPreview implements SurfaceHolder.Callback, Camera.PreviewCall { private Camera mCamera = null; private ImageView MyCameraPreview = null; + private ImageView wImageView = null; private Bitmap bitmap = null; + private Bitmap wbitmap = null; private int[] pixels = null; + private int[] wpixels = null; private byte[] FrameData = null; private int imageFormat; private int PreviewSizeWidth; @@ -40,9 +43,10 @@ public class CameraPreview implements SurfaceHolder.Callback, Camera.PreviewCall Handler mHandler = new Handler(Looper.getMainLooper()); - public CameraPreview(int PreviewlayoutWidth, int PreviewlayoutHeight, ImageView CameraPreview, Activity context) + public CameraPreview(int PreviewlayoutWidth, int PreviewlayoutHeight, ImageView CameraPreview,ImageView wrapedImageView, Activity context) { this.context = context; + wImageView = wrapedImageView; PreviewSizeWidth = PreviewlayoutWidth; PreviewSizeHeight = PreviewlayoutHeight; MyCameraPreview = CameraPreview; @@ -140,8 +144,10 @@ public class CameraPreview implements SurfaceHolder.Callback, Camera.PreviewCall PreviewSizeHeight = parameters.getPreviewSize().height; bitmap = Bitmap.createBitmap(PreviewSizeHeight, PreviewSizeWidth, Bitmap.Config.ARGB_8888); + wbitmap = Bitmap.createBitmap(330, 300, Bitmap.Config.ARGB_8888); pixels = new int[PreviewSizeWidth * PreviewSizeHeight]; + wpixels = new int[330 * 300]; mCamera.startPreview(); } @@ -226,7 +232,7 @@ public class CameraPreview implements SurfaceHolder.Callback, Camera.PreviewCall // Native JNI // public native boolean ImageProcessing(int width, int height, - byte[] NV21FrameData, int[] pixels); + byte[] NV21FrameData, int[] pixels,int[] wpixels); static @@ -240,10 +246,14 @@ public class CameraPreview implements SurfaceHolder.Callback, Camera.PreviewCall public void run() { bProcessing = true; - ImageProcessing(PreviewSizeWidth,PreviewSizeHeight , FrameData, pixels); + ImageProcessing(PreviewSizeWidth,PreviewSizeHeight , FrameData, pixels, wpixels); bitmap.setPixels(pixels, 0, PreviewSizeHeight, 0, 0, PreviewSizeHeight, PreviewSizeWidth); MyCameraPreview.setImageBitmap(bitmap); + + wbitmap.setPixels(wpixels, 0, 330, 0, 0, 330, 300); + wImageView.setImageBitmap(wbitmap); + bProcessing = false; } }; diff --git a/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/MainActivity.java b/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/MainActivity.java index 936abd15b..02ad107e1 100644 --- a/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/MainActivity.java +++ b/Software/Android_Studio/ColorCaptureTest/app/src/main/java/com/twine/colorcapturetest/MainActivity.java @@ -42,10 +42,11 @@ public class MainActivity extends AppCompatActivity tv.setText(stringFromJNI()); ImageView imageView = findViewById(R.id.imageView); + ImageView wimageView = findViewById(R.id.imageView2); camView = new SurfaceView(this); SurfaceHolder camHolder = camView.getHolder(); - camPreview = new CameraPreview(PreviewSizeWidth, PreviewSizeHeight, imageView,this); + camPreview = new CameraPreview(PreviewSizeWidth, PreviewSizeHeight, imageView,wimageView,this); camHolder.addCallback(camPreview); camHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); diff --git a/Software/Android_Studio/ColorCaptureTest/app/src/main/res/layout/activity_main.xml b/Software/Android_Studio/ColorCaptureTest/app/src/main/res/layout/activity_main.xml index 3713cafd0..f9add8675 100644 --- a/Software/Android_Studio/ColorCaptureTest/app/src/main/res/layout/activity_main.xml +++ b/Software/Android_Studio/ColorCaptureTest/app/src/main/res/layout/activity_main.xml @@ -33,10 +33,20 @@ tools:layout_editor_absoluteX="16dp" tools:layout_editor_absoluteY="16dp" /> + +