[stackoverflow] [progress Openedge Abl] Google Map V2 Snapshot To Grayscale Using Opencv

Status
Not open for further replies.
D

Demeteor

Guest
I am trying to convert the snapshot taken from google maps to grayscale (thresholding etc) But I don't understand how opencv works, I have implemented it successfully but I dont understand how people define what image to process, Here is my mapsactivity code.

package com.example.admin.pathplaning;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.GoogleMap.SnapshotReadyCallback;


import org.opencv.android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Map;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
GPSTracker gps;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}


/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;

gps = new GPSTracker(MapsActivity.this);
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
// Add a marker in operators possition and move the camera
LatLng operator = new LatLng(latitude,longitude);
mMap.addMarker(new MarkerOptions().position(operator).title("Boat Operator"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(operator));
mMap.animateCamera(CameraUpdateFactory.zoomTo(19.0f));

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override

public void onMapClick(LatLng point) {
MarkerOptions marker = new MarkerOptions().position(
new LatLng(point.latitude,point.longitude)).title("Destenation");
mMap.addMarker(marker);
Bitmap bitmap;
SnapshotReadyCallback callback = new SnapshotReadyCallback() {
@Override

public void onSnapshotReady(Bitmap bitmap) {

Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss",now);
try {
String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";
File imageFile = new File(mPath);
FileOutputStream out = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG,90,out);
Log.d("Image:","Saved Snashot. Starting covertion");
String gPath = Environment.getExternalStorageDirectory().toString() + "/" + now + "gray.jpg";
ImageView imgview = (ImageView) findViewById(R.id.imageView);
Bitmap myBitmap = BitmapFactory.decodeFile(mPath);
imgview.setImageBitmap(myBitmap);
Mat mRgba = new Mat();
Mat gray = new Mat(CvType.CV_8UC1);
Imgproc.cvtColor(mRgba,gray,Imgproc.COLOR_BGR2GRAY);

}

catch (Exception e) {
e.printStackTrace();
}
}
};
mMap.snapshot(callback);
Log.d("test","test2");
}
});

}
}


Here is the XML

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.admin.pathplaning.MainActivity">

<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="149dp"
android:layout_height="match_parent"
tools:context="com.example.admin.pathplaning.MapsActivity"
android:layout_row="0"
android:layout_column="1" />

<ImageView
android:layout_width="209dp"
android:layout_height="485dp"
app:srcCompat="@drawable/cast_abc_scrubber_control_off_mtrl_alpha"
android:id="@+id/imageView" />
</GridLayout>


And here you can see an error I get but, yeh still I cant udnerstand what is happening not even from the documentation of openCV this is really new to me


E/art: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.admin.pathplaning, PID: 8041 java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__) at org.opencv.core.Mat.n_Mat(Native Method) at org.opencv.core.Mat.(Mat.java:24) at com.example.admin.pathplaning.MapsActivity$1$1.onSnapshotReady(MapsActivity.java:95) at com.google.android.gms.maps.GoogleMap$16.zzH(Unknown Source) at com.google.android.gms.maps.internal.zzag$zza.onTransact(Unknown Source) at android.os.Binder.transact(Binder.java:514) at com.google.android.gms.maps.internal.dn.a:)com.google.android.gms.DynamiteModulesB:117) at com.google.maps.api.android.lib6.impl.a.a:)com.google.android.gms.DynamiteModulesB:92) at com.google.maps.api.android.lib6.gmm6.api.y.run:)com.google.android.gms.DynamiteModulesB:2014) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6209) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) D/AppTracker: App Event: crash I/Process: Sending signal. PID: 8041 SIG: 9 Application terminated.

Continue reading...
 
Status
Not open for further replies.
Top