I am trying to create a color recognition app for android. I want to check if a color is in range and measure the time it takes for that color to be in range. My problem is my app quits unexpectedly when it hit the "start test" button. I have no idea why its doing this, I believe I have set everything up right, but obviously I'm incorrect.
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceView;
import android.view.View;
import android.widget.TextView;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.JavaCameraView;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;
public class testActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
private JavaCameraView mOpenCVCameraView;
Mat videoCamera;
Mat whiteArray;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status){
switch (status){
case LoaderCallbackInterface.SUCCESS: {
mOpenCVCameraView.enableView();
break;
}
default:{
super.onManagerConnected(status);
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
mOpenCVCameraView = (JavaCameraView) findViewById(R.id.testPageBackground);
mOpenCVCameraView.setVisibility(SurfaceView.INVISIBLE);
mOpenCVCameraView.setCvCameraViewListener(this);
getSupportActionBar().hide();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.menu_test, menu);
mOpenCVCameraView.setCvCameraViewListener(this);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
}
public void onDestroy(){
super.onDestroy();
if (mOpenCVCameraView != null){
mOpenCVCameraView.disableView();
}
}
@Override
public void onCameraViewStarted(int width, int height) {
videoCamera = new Mat(5,5,CvType.CV_8SC4);
whiteArray = new Mat(5,5,CvType.CV_8SC4);
}
@Override
public void onCameraViewStopped() {
videoCamera.release();
whiteArray.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame)
{
return inputFrame.rgba();
}
public void startTest (View view)
{
View lagSquare = findViewById(R.id.lagSquare);
TextView lagRating = (TextView) findViewById(R.id.lagRating);
TextView lagTime = (TextView) findViewById(R.id.lagTime);
double[] timeArray = new double[100]; // set array
int testAmount;
double rating;
double lagStartTime;
double lagEndTime;
double lagTimeResult;
for (testAmount = 0; testAmount < 100; testAmount++) //test loop
{
lagSquare.setBackgroundColor(Color.rgb(000,000,000)); //set lagSquare black
lagStartTime = System.nanoTime(); //start lagTimer start
lagSquare.setBackgroundColor(Color.rgb(255, 255, 255)); //set lagSquare white
//set loop that checks for white
Core.inRange(videoCamera, new Scalar(0, 0, 95), new Scalar(0, 0, 100), whiteArray);
while (Core.countNonZero(whiteArray) == 0);
{
}
lagEndTime = System.nanoTime(); //start lagTimer end
lagTimeResult = (lagEndTime - lagStartTime);//stop lag timer
timeArray[testAmount] = lagTimeResult; //put lagTimerResult in array
}
// min scan
double minTimeArray = timeArray[0];
for (int cnt=0; cnt < timeArray.length; cnt++ )
{
if (timeArray[cnt] < minTimeArray)
{
minTimeArray = timeArray[cnt];
}
}
String minTimeArrayString = String.valueOf(minTimeArray);
lagTime.setText(minTimeArrayString); //smallest number in timer array output to lagTime label
}
}
08-13 18:41:19.613 25826-25826/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: bluemage.systems.displaylatencytester, PID: 25826
java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View$1.onClick(View.java:4020)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to read from field 'long org.opencv.core.Mat.nativeObj' on a null object reference
at org.opencv.core.Core.countNonZero(Core.java:2053)
at bluemage.systems.displaylatencytester.testActivity.startTest(testActivity.java:125)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View$1.onClick(View.java:4015)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire