谁来帮帮我运行android的时候出现这个问题怎么解决呢,回答有重赏。。。。。大神

问题描述

谁来帮帮我运行android的时候出现这个问题怎么解决呢,回答有重赏。。。。。大神

05-20 05:07:15.757: W/dalvikvm(668): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-20 05:07:15.788: E/AndroidRuntime(668): FATAL EXCEPTION: main
05-20 05:07:15.788: E/AndroidRuntime(668): java.lang.NullPointerException
05-20 05:07:15.788: E/AndroidRuntime(668): at com.just.javacv.FaceDecetionForTest.loadTrainImageData(Androidbs2Activity.java:111)
05-20 05:07:15.788: E/AndroidRuntime(668): at com.just.javacv.Androidbs2Activity$1.onClick(Androidbs2Activity.java:42)
05-20 05:07:15.788: E/AndroidRuntime(668): at android.view.View.performClick(View.java:3511)
05-20 05:07:15.788: E/AndroidRuntime(668): at android.view.View$PerformClick.run(View.java:14105)
05-20 05:07:15.788: E/AndroidRuntime(668): at android.os.Handler.handleCallback(Handler.java:605)
05-20 05:07:15.788: E/AndroidRuntime(668): at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 05:07:15.788: E/AndroidRuntime(668): at android.os.Looper.loop(Looper.java:137)
05-20 05:07:15.788: E/AndroidRuntime(668): at android.app.ActivityThread.main(ActivityThread.java:4424)
05-20 05:07:15.788: E/AndroidRuntime(668): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 05:07:15.788: E/AndroidRuntime(668): at java.lang.reflect.Method.invoke(Method.java:511)
05-20 05:07:15.788: E/AndroidRuntime(668): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-20 05:07:15.788: E/AndroidRuntime(668): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-20 05:07:15.788: E/AndroidRuntime(668): at dalvik.system.NativeStart.main(Native Method)
package com.just.javacv;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;

import com.googlecode.javacv.cpp.opencv_core.CvMat;
import com.googlecode.javacv.cpp.opencv_core.CvScalar;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.just.util.FileUtil;

import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;

public class Androidbs2Activity extends Activity {
private Button button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)this.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

                FaceDecetionForTest faceDecetion = new FaceDecetionForTest();

                //项目根目录下的train文件夹中,保存有训练样本orl图像文件200张
                String str1 = ".//train";

                String[] photos = FileUtil.readImageFromDir(str1);
                //加载训练样本
                faceDecetion.loadTrainImageData(photos);
                faceDecetion.doPCA();
                System.out.println("特征矩阵的大小为:rows="+faceDecetion.result.rows()+",cols="+faceDecetion.result.cols());

                String testImage = ".//test//orl_022_007.bmp";
                faceDecetion.loadTestImageData(testImage);
                //显示识别结果

// faceDecetion.showResult(faceDecetion.photos, testImage);
System.out.println("识别结果文件路径:"+faceDecetion.getResultPhotoPath());
//将训练样本的特征矩阵写入文本文件中
try {
FileUtil.writeMatToFile(faceDecetion.getResult(), ".//data//cvMat.txt");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// CvMat mat = FileUtil.readerMatFromFile(".//data//cvMat.txt");

            }

    });
}

}
/**

  • 人脸识别图像PCA降维处理类,该类可加载某一文件夹中的图像,进行PCA降维生成特征矩阵
  • @author Administrator
    *
    */
    class FaceDecetionForTest{

    //待训练的数据
    private CvMat trainImagesRow;

    //待识别的数据
    private CvMat testImagesRow;

    //降维后的特征矩阵
    CvMat result;

    //测试样本得到的特征向量
    private CvMat result2;

    private CvMat avg;

    private CvMat eigenVectors;

    //训练样本图像路径的集合
    private ArrayList photos;

    public FaceDecetionForTest() {
    //初始化数据
    this.trainImagesRow = null;
    this.testImagesRow = null;
    this.result = new CvMat();
    this.result2 = new CvMat();
    this.avg = new CvMat();
    this.eigenVectors = new CvMat();
    this.photos = new ArrayList();
    }

    /**

    • 加载训练图片
    • @param imageList
      */
      public void loadTrainImageData(String[] photoArray) {

      //将读取到的图像路径保存在photos中,一边识别时按序号找到文件路径
      for (int i = 0; i < photoArray.length; i++) {
      photos.add(photoArray[i]);
      }

      //按照图像文件路径,将图像加载为IplImage数据,并按顺序保存至faces中
      ArrayList faces = new ArrayList();
      for (int i = 0; i < photoArray.length; i++) {
      IplImage tempImage = cvLoadImage(photoArray[i],0);
      faces.add(tempImage);
      }

      //获取训练样本的大小rows*cols
      int rows = faces.size();
      int cols = faces.get(0).width()*faces.get(0).height();

      //设定训练样本的矩阵的大小和数据类型
      trainImagesRow = cvCreateMat(rows,cols,CV_32FC1);

      //在控制台输出训练样本的大小
      System.out.println("训练样本库的大小为:rows="+rows+",cols="+cols);

      //输出训练样本的个数
      System.out.println("训练样本的个数为facesSize="+faces.size());
      System.out.println("单个训练样本的大小为:rows="+faces.get(0).height()+",cols="+faces.get(0).width());

      //循环获取faces中的数据,将IplImage转换为CvMat后加载至训练样本矩阵中
      for (int i = 0; i < faces.size(); i++) {

      IplImage image = faces.get(i);
      //根据图像的大小生成同样大小的矩阵
      CvMat mat = cvCreateMat(image.height(), image.width(), CV_32FC1);
      //将图像数据转换为矩阵保存
      cvConvert(image, mat);
      
      int index = 0;
      //将一幅图像图像转换为 训练矩阵中的一行 保存
      for (int j2 = 0; j2 < mat.rows(); j2++) {
          for (int k = 0; k < mat.cols(); k++) {
              trainImagesRow.put(i, index, mat.get(j2, k));
              index++;
          }
      }
      

      }
      }

    /**

    • 加载测试样本
    • @param imagePath 测试样本图像文件的路径
      */
      public void loadTestImageData(String imagePath) {
      //根据图像文件的路径,将文件加载为IplImage类型
      IplImage image = cvLoadImage(imagePath,0);

      //根据image生成同样大小的测试样本矩阵
      testImagesRow = cvCreateMat(1, image.width()*image.height(), CV_32FC1);

      //将图像数据保存为CvMat后加载至测试样本矩阵中
      CvMat mat = cvCreateMat(image.height(), image.width(), CV_32FC1);
      cvConvert(image, mat);

      int index = 0;
      for (int i = 0; i < mat.rows(); i++) {
      for (int j = 0; j < mat.cols(); j++) {
      testImagesRow.put(0,index,mat.get(i,j));
      index++;
      }
      }

      //按照测试样本的大小,生成测试样本特征向量的大小 ()
      result2 = cvCreateMat(testImagesRow.rows(), result.cols(), CV_32FC1);
      System.out.println("测试样本特征向量的大小rows="+result2.rows()+",cols="+result2.cols());
      //生成测试样本特征向量
      cvProjectPCA(testImagesRow, avg, eigenVectors, result2);
      }

    public void doPCA(){

    System.out.println("doPCA……start");
    avg = cvCreateMat(1, trainImagesRow.cols(), CV_32FC1);
    
    //训练特征向量
    CvMat eigenValues = cvCreateMat(1, Math.min(trainImagesRow.rows(), trainImagesRow.cols()), CV_32FC1);
    
    eigenVectors = cvCreateMat(Math.min(trainImagesRow.rows(), trainImagesRow.cols()), trainImagesRow.cols(), CV_32FC1);
    
    //取特征向量的前P个特征值,作为比较结果
    result = cvCreateMat(trainImagesRow.rows(), Math.min(trainImagesRow.rows(), trainImagesRow.cols()), CV_32FC1);
    
    cvCalcPCA(trainImagesRow, avg, eigenValues, eigenVectors, CV_PCA_DATA_AS_ROW);
    
    //生成训练样本特征矩阵
    cvProjectPCA(trainImagesRow, avg, eigenVectors, result);
    
    System.out.println("doPCA……over");
    

    }

    /**

    • 显示识别结果
    • @param photos 保存训练样本图像的list集合
    • @param testImage 测试样本图像的路径
      */
      public void showResult(ArrayList photos,String testImage) {

      //取得是被结果的类序号
      int num = euclideanDistance(result, result2);

      //按类序号乘以类中图片的数量,获取识别结果的图像路径,显示图像
      cvShowImage("result", cvLoadImage(photos.get(num*5)));

      //根据测试样本图像的路径,显示图像
      cvShowImage("src", cvLoadImage(testImage));

      cvWaitKey(5000);
      }

    /**

    • 获取欧式距离
    • @param trainData
    • @param testData
    • @return
      */
      public int euclideanDistance(CvMat trainData,CvMat testData) {

      double[] num = new double[trainData.rows()];
      //获取测试样本特征向量与训练样本特征矩阵每一行的欧式距离
      for (int i = 0; i < trainData.rows(); i++) {
      double sum = 0;
      for (int j = 0; j < trainData.cols(); j++) {
      sum += Math.pow(Math.abs(trainData.get(i, j))-Math.abs(testData.get(0, j)), 2);
      }
      num[i] = Math.sqrt(sum);
      }
      //获取欧氏距离的和中最小的类的序号
      return minArrayElement(num);
      }

    private int minArrayElement(double[] array) {
    //将欧氏距离按类相加
    double classifyArray[] = new double[array.length/5];
    int count = 0;
    for (int i = 0; i < array.length; i++) {
    if (i%5==0&&i!=0) {
    count++;
    }else {
    classifyArray[count]+= array[i];
    }
    }

    //求类间欧氏距离和的最小值,index为该类的序号
    int index = 0;
    double min = classifyArray[0];
    for (int i = 0; i < classifyArray.length; i++) {
        if (min>classifyArray[i]) {
            min = classifyArray[i];
            index = i;
        }
    }
    return index;
    

    }

    /**

    • 获取识别结果的文件路径
    • @return
      */
      public String getResultPhotoPath() {
      int num = euclideanDistance(result, result2);
      return photos.get(num*5);
      }

    public CvMat getResult() {
    return result;
    }

    public void setResult(CvMat result) {
    this.result = result;
    }
    }

解决方案

空指针异常, 贴一下Androidbs2Activity.java文件的代码, 不然怎么看是什么问题

解决方案二:

05-20 05:07:15.788: E/AndroidRuntime(668): at com.just.javacv.Androidbs2Activity$1.onClick(Androidbs2Activity.java:42)

解决方案三:

Androidbs2Activity 里第111行。。。空指针

解决方案四:

Androidbs2Activity.java:111,第111行有对象你没有判断null值

解决方案五:

空指针,lz学会开logcat哦

解决方案六:

5-20 05:07:15.788: E/AndroidRuntime(668): at com.just.javacv.Androidbs2Activity$1.onClick(Androidbs2Activity.java:42
判断一下里边的那个东西空了,然后修改空的值,就行

解决方案七:

看logcat,debug也行呢

解决方案八:

String[] photos = FileUtil.readImageFromDir(str1); 可能是这个为空,你打Log出来看看这个photos是否为null吧。。。

时间: 2024-09-17 03:24:26

谁来帮帮我运行android的时候出现这个问题怎么解决呢,回答有重赏。。。。。大神的相关文章

android 类qq空间图片查看器。出现好多错误 求大神帮忙。小女涉入甚浅。

问题描述 android 类qq空间图片查看器.出现好多错误 求大神帮忙.小女涉入甚浅. 11-20 11:26:39.629: E/AndroidRuntime(1136): FATAL EXCEPTION: main 11-20 11:26:39.629: E/AndroidRuntime(1136): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.desktop/co

多线程-android client使用 apache 第三方远程访问包TelnetClient,一直出错请众大神帮帮忙

问题描述 android client使用 apache 第三方远程访问包TelnetClient,一直出错请众大神帮帮忙 error: dalvikvm Could not find class 'org.apache.commons.net.telnet.TelnetClient', referenced from method com.test.telnet.TelnetUtil. AndroidRuntime FATAL EXCEPTION: Thread-1263 AndroidRun

mysql-用MySQL运行了一个maven ssm程序框架到web上,求位大神告诉我这是什么错误?谢谢!

问题描述 用MySQL运行了一个maven ssm程序框架到web上,求位大神告诉我这是什么错误?谢谢! [com.alibaba.druid.pool.DruidDataSource]create connection error java.sql.SQLException: Access denied for user 'sypro'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException

cocos2dx3.x-Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙。求

问题描述 Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙.求 Cocos3.x 移植到Android平台 xml文件读取出错,搞了两天了,大神们帮帮忙.网上的代码也看完了,不顶用.想要个人来交流. 解决方案 顶起来,大神们,小弟今天是要离不开公司了.拜托了

用 androidstudio 阅读android源码的布局文件 为什么没有预览?求大神解惑;

问题描述 用 androidstudio 阅读android源码的布局文件 为什么没有预览?求大神解惑: RT,用eclipse的时候偶尔还能看到点东西,用androidstudio 连预览界面都不出现 解决方案 两种原因一种是布局有错误 二是没有选对SDK 解决方案二: 不出现就是因为布局输出错误或者导入自定义布局,不执行代码,就不显示自定义布局内容

android真机调试,获取网页源代码,返回302.请大神指点迷津,万分感谢!

问题描述 android真机调试,获取网页源代码,返回302.请大神指点迷津,万分感谢! 获取网页源代码,返回code是302 用真机调试 ,请大神指点迷津,万分感谢! URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.set

请问android settings的源码在查看啊,我看好多大神都会查

问题描述 请问android settings的源码在查看啊,我看好多大神都会查 RT,我想了解下关于android系统设置的源码.在网上只看到大神说查了源码他知道了什么什么.先谢谢各位大神了. 解决方案 请看:http://developer.android.com/develop/index.html

android播放器点播放后,出现以下错误,求大神帮忙解决

问题描述 android播放器点播放后,出现以下错误,求大神帮忙解决 解决方案 权限设置没设置,要在配置文件把android.permission.access_network_state这个权限加进去

c-好奇怪的运行结果,调了一下午,实在没办法了,求大神帮助我

问题描述 好奇怪的运行结果,调了一下午,实在没办法了,求大神帮助我 题目说明:/*题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天.这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 高斯出生于:1777年4月30日. 在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年