質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2861閲覧

Attempt to invoke virtual method on a null object reference の解消法

shutein

総合スコア14

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/12/07 06:53

###前提・実現したいこと
androidstudioでJavaとOpenCVを使い画像認識を使ったアプリを開発しています。
現在、
画像の画素値を取得し、一定以上の値を持つ画素の座標を保存したいと考えています。
詳しくはこちらの質問に書いてあります。
画素取得とその座標保存についての質問

###発生している問題・エラーメッセージ
画素を取得するにあたり
一度matから画素値をfloat[]の配列に直し、各要素の大きさを調べようと
コードを書いていたのですがタイトルにあるエラーが発生してしまいました。

どこがダメなのか全くわからずお手上げの状態です。
どなたか教えて頂けないでしょうか。

color2 E/AndroidRuntime: FATAL EXCEPTION: Thread-3 Process: com.example.janome.color2, PID: 12263 java.lang.NullPointerException: Attempt to invoke virtual method 'float java.lang.Float.floatValue()' on a null object reference at com.example.janome.color2.MainActivity.onCameraFrame(MainActivity.java:238) at org.opencv.android.CameraBridgeViewBase$CvCameraViewListenerAdapter.onCameraFrame(CameraBridgeViewBase.java:163) at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:399) at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:352) at java.lang.Thread.run(Thread.java:776)

###該当のソースコード
対応するコードはこの部分になります

Java

1 Mat avem =new Mat(108,192,CV_32F); 2 avem.put(0,0,ave); // 求めた配列をMatに変換した 3 // System.out.println(avem.dump()); 4 5 Mat avem2 =new Mat(108,192,CvType.CV_32F); 6 Imgproc.GaussianBlur(avem,avem2,new Size(31,31),0,0); // 平滑化 7 //m_temp=avem2; //inputframe とサイズが違うから表示できない? 8 // System.out.println(avem2.dump()); //matをFloat型にすることで平滑化はできた  しかし最大値が多数存在した→Sizeを変えることで多少は最大値は絞れた 9 10 int r =0; 11 // int o=0; 12 float pix= 0 ; 13 Float [] data =new Float[avem2.width()*avem2.height()]; 14 // double [] data =new double[avem2.width()*avem2.height()]; 15 int [][] data2 =new int[2][avem2.width()*avem2.height()]; 16 avem2.get(0,0,data); //←ここでエラ―発生  avem2とdata の形式が違ってる? 17 18 for(int y=0;y<avem2.height();y++) { 19 for (int x = 0; x < avem2.width(); x++) { 20 for (int o = 0; o < avem2.width() * avem2.height(); o++) { 21 // avem2.get(y,x); //画素値にアクセス 22 // System.out.println("値は"+data[o]); 23 24 pix = data[o]; 25 26 if (pix > 0.98) { 27 data2[0][r] = x; 28 data2[1][r] = y; 29 // System.out.println(+(r+1)+"番目の座標が"+data2[0][r]+","+data2[1][r]); 30 System.out.println("x座標は" + data2[0][r] + "y座標は" + data2[1][r]); 31 r++; 32 } 33 } 34 } 35 }

###補足情報(言語/FW/ツール等のバージョンなど)
androidstudio 2.3.1
java
OpenCV 3.0.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

プリミティブのfloat配列なら各要素の初期値が0.0fになるのに対し、
参照型であるFloatの配列の場合、各要素の初期値はnullになります。
おそらくavem2.getの内部で配列からfloat要素を取ろうとしてnullを取ったためと思われます。

投稿2017/12/07 13:16

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問