返回信息流代码如下,运行报空指针错误,求教各位老司机!
public picProc mpicPro;
mpicPro.picProc(rootPath + "/object", rootPath, "scene1.jpg");
public class picProc {
public String objectImgPath;
public String sceneImgPath;
public String objectImgName = "object.jpg";
public String sceneImgName;
public Mat objectMat = new Mat();
public Mat objectImg = new Mat();
public Mat objectGray = new Mat();
public Mat sceneMat = new Mat();
public Mat sceneImg = new Mat();
public Mat sceneGray = new Mat();
public Bitmap grayBmpOut;
public Size sSize5;
public void picProc(String objectImgPath, String sceneImgPath, String sceneImgName) {
this.objectImgPath = objectImgPath;
this.sceneImgPath = sceneImgPath;
this.sceneImgName = sceneImgName;
MatOfKeyPoint objectKeypoints;
MatOfKeyPoint sceneKeypoints;
//transform object img into objectGray
Bitmap objectBmp = BitmapFactory.decodeFile(objectImgPath + "/" + objectImgName);
Utils.bitmapToMat(objectBmp, objectMat);
objectMat.copyTo(objectImg);
Imgproc.cvtColor(objectImg, objectGray, Imgproc.COLOR_RGBA2GRAY);
//transform scene img into sceneGray
Bitmap sceneBmp = BitmapFactory.decodeFile(sceneImgPath + "/" + sceneImgName);
Utils.bitmapToMat(sceneBmp, sceneMat);
sceneMat.copyTo(sceneImg);
Imgproc.cvtColor(sceneImg, sceneGray, Imgproc.COLOR_RGBA2GRAY);
if (objectMat==null || sceneMat==null){
System.out.print("----Error getting mat");
}
if (objectGray==null || sceneGray==null){
System.out.print("----Error getting grayscale");
}
//get keypoints
FeatureDetector detector = FeatureDetector.create(FeatureDetector.BRISK);
objectKeypoints = new MatOfKeyPoint();
sceneKeypoints = new MatOfKeyPoint();
detector.detect(objectGray, objectKeypoints);
detector.detect(sceneGray, sceneKeypoints);
//get descriptors;
DescriptorExtractor descriptor = DescriptorExtractor.create(DescriptorExtractor.BRISK);
Mat objectDescriptors = new Mat();
Mat sceneDescriptors = new Mat();
descriptor.compute(objectGray, objectKeypoints, objectDescriptors);
descriptor.compute(sceneGray, sceneKeypoints, sceneDescriptors);
//Match
DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.FLANNBASED);
MatOfDMatch matches = new MatOfDMatch();
matcher.match(objectDescriptors, sceneDescriptors, matches);
double max_dist = 0;
double min_dist = 100;
List<DMatch> matchesList = matches.toList();
List<DMatch> bestMatcheList = new ArrayList<DMatch>();
MatOfDMatch bestMatchMat = null;
//-- Quick calculation of max and min distances between keypoints
for( int i = 0; i < matchesList.size(); i++ ) {
double dist = (double) matchesList.get(i).distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}
System.out.printf("-- Max dist : %f \n", max_dist);
System.out.printf("-- Min dist : %f \n", min_dist);
//-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist )
for( int i = 0; i < matchesList.size(); i++ ){
double dist = (double) matchesList.get(i).distance;
if( dist < 3*min_dist ) {
bestMatcheList.add( matchesList.get(i)); }
}
//get best match mat
bestMatchMat.fromList(bestMatcheList);
Mat matchOutImg = new Mat();
Features2d.drawMatches(objectMat, objectKeypoints, sceneMat, sceneKeypoints, bestMatchMat, matchOutImg);
saveMat2Pic(matchOutImg, sceneImgPath, "matchOutImg"+String.valueOf(System.currentTimeMillis())+".jpg");
}
}
其中saveMat2Pic()肯定没问题。出错信息如下,多谢各位老司机!
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.kerwin.idrec, PID: 15149
java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.example.kerwin.idrec/com.example.kerwin.idrec.MainActivity}:
java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
at android.app.ActivityThread.access$800(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5315)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.kerwin.idrec.MainActivity.onCreate(MainActivity.java:59)
at android.app.Activity.performCreate(Activity.java:5280)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
at android.app.ActivityThread.access$800(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
at android.os.Handler.dispatchMessage(Handler.java:110)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5315)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
at dalvik.system.NativeStart.main(Native Method)
04-03 21:39:34.251 15149-15149/com.example.kerwin.idrec I/Process: Sending signal. PID: 15149 SIG: 9
这是一条镜像帖。来源:北邮人论坛 / java / #49041同步于 2016/4/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]空指针求教
zkkai
2016/4/3镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。