🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
OpenCV

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2579閲覧

OpenCV Matクラスの初期化でエラーが発生しアプリが落ちてしまいます

tanuki_

総合スコア40

OpenCV

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2021/01/22 01:32

前提・実現したいこと

はじめまして。
AndroidStudio+java+OpenCVでOCR機能を作っています。
Matクラスの初期化でエラーが発生しアプリが停止してしまう為困っています。

発生している問題・エラーメッセージ

エラーメッセージ 表示されません。tryCatchしても確認できませんでした。

該当のソースコード

java

java MainActivity.java

1ソースコード 2public class MainActivity extends AppCompatActivity { 3 4 private static final int REQUEST_CODE_PICK_CONTENT = 0; 5 6 private OCR _ocr; 7 private int resultWidth = 300; 8 private int resultHeight = 200; 9 private Mat frame; 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) { 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.activity_main); 15 16 _ocr = new OCR(getApplicationContext()); 17 18 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 19 @Override 20 public void onClick(View v) { 21 // クリック時の処理 22 Intent intent; 23 if(Build.VERSION.SDK_INT < 19){ 24 intent = new Intent(Intent.ACTION_PICK); 25 intent.setAction(Intent.ACTION_GET_CONTENT); 26 }else{ 27 intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 28 intent.addCategory(Intent.CATEGORY_OPENABLE); 29 } 30 intent.setType("image/*"); 31 startActivityForResult(intent, REQUEST_CODE_PICK_CONTENT); 32 } 33 }); 34 } 35 36 @Override 37 protected void onActivityResult(int requestCode, int resultCode, Intent data){ 38 super.onActivityResult(requestCode, resultCode, data); 39 40 if(requestCode == REQUEST_CODE_PICK_CONTENT){ 41 String ocrString; 42 if(resultCode == RESULT_OK && data != null){ 43 Bitmap bitmap = null; 44 if(Build.VERSION.SDK_INT < 19){ 45 try{ 46 InputStream in = getContentResolver().openInputStream(data.getData()); 47 bitmap = BitmapFactory.decodeStream(in); 48 try{ 49 if(in != null){ in.close(); } 50 }catch(IOException e){ 51 e.printStackTrace(); 52 } 53 }catch(FileNotFoundException e){ 54 e.printStackTrace(); 55 } 56 }else{ 57 Uri uri = data.getData(); 58 try{ 59 ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(uri, "r"); 60 if(parcelFileDescriptor != null){ 61 FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); 62 bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor); 63 parcelFileDescriptor.close(); 64 } 65 66 }catch(IOException e){ 67 e.printStackTrace(); 68 } 69 } 70 if(bitmap != null){ 71 ImageView imageView = (ImageView)findViewById(R.id.image); 72 imageView.setScaleType(ImageView.ScaleType.FIT_CENTER); 73 //ここからOpenCV組み込み 74 Rect r = new Rect(150, 160, resultWidth, resultHeight); 75 76 Mat frame = new Mat(480, 745, CvType.CV_8UC3);←ここで落ちてしまいます。 77 78 Mat clip = frame.submat(r); 79 80 Mat mask = clip.clone(); 81 82 Mat gray = clip.clone(); 83 Mat thresh = clip.clone(); 84 Imgproc.cvtColor(clip, gray, Imgproc.COLOR_RGB2GRAY); 85 Imgproc.threshold(gray, thresh, 0, 255, Imgproc.THRESH_OTSU ); 86 Imgproc.medianBlur(thresh, mask, 7); 87 88 //ここまでOpenCV組み込み 89 90 //画面に読取画像をセット 91 imageView.setImageBitmap(bitmap); 92 //解読 93 //ocrString = _ocr.getString(getApplicationContext(), bitmap); 94 ocrString = _ocr.getString(getApplicationContext(), bitmap, mask); 95 }else{ 96 ocrString = "bitmap is null"; 97 } 98 }else{ 99 ocrString = "something wrong?"; 100 } 101 ((TextView)findViewById(R.id.OCRString)).setText(ocrString); 102 } 103 } 104 105 106}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

AndroidStudio4.1.0
OpenCV4.4.0
java1.8

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

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

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

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

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

guest

回答1

0

ベストアンサー

OpenCVがロードされていないのではないでしょうか?

static { System.loadLibrary("opencv_java4"); // 追加 }

参考:https://qiita.com/iwatake2222/items/2642669419fdaa20a8a6

投稿2021/01/22 15:11

razuma

総合スコア1313

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

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

tanuki_

2021/01/22 22:36

ありがとうございます。 試してみます。
tanuki_

2021/01/29 07:13

時間が取れず確認出来ていませんでしたが、onCreateより前にライブラリを読み込む事で解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問