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

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

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

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

Java

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

Android Studio

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

Q&A

解決済

1回答

2956閲覧

AndroidStudioでギャラリーから取得した画像をファイル保存しopencvに読み込みたい

tukim

総合スコア8

OpenCV

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

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/04/17 09:26

編集2020/04/17 20:43

---### 前提・実現したいこと

アプリ開発初心者です。
MainActivityから画面遷移したのちに
リンク内容
こちらの記事を参考にギャラリーから画像を取得し標示することはできました。
そのあとにopencvに画像を読み込み画像処理をしたいと思っているのですが
mat_src = Imgcodecs.imread()
この際のimreadにファイル名を入れると思うのですが取得した画像のファイル名がわかりません。 mbitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
このmbitmapの部分がどうしてもエラーになってしまいます。

該当のソースコード

java

1import androidx.appcompat.app.AppCompatActivity; 2 3import android.content.ContentValues; 4import android.content.Intent; 5import android.graphics.Bitmap; 6import android.media.MediaScannerConnection; 7import android.net.Uri; 8import android.os.Build; 9import android.os.Bundle; 10import android.os.Environment; 11import android.provider.MediaStore; 12import android.util.Log; 13import android.view.View; 14import android.widget.Button; 15import android.widget.ImageView; 16 17import org.opencv.core.Mat; 18import org.opencv.imgcodecs.Imgcodecs; 19 20import java.io.File; 21import java.io.FileOutputStream; 22import java.text.SimpleDateFormat; 23import java.util.Date; 24 25public class SettingActivity extends AppCompatActivity { 26 27 private static final int REQUEST_CHOOSER= 1000; 28 private Uri m_uri; 29 @Override 30 protected void onCreate(Bundle savedInstanceState) { 31 super.onCreate(savedInstanceState); 32 setContentView(R.layout.activity_setting); 33 34 Button returnButton = findViewById(R.id.button2); 35 returnButton.setOnClickListener(new View.OnClickListener() { 36 @Override 37 public void onClick(View v) { 38 finish(); 39 } 40 }); 41 42 43 44 45 //カメラIntent呼出 46 String photoName = System.currentTimeMillis() + ".jpg"; 47 ContentValues contentValues = new ContentValues(); 48 contentValues.put(MediaStore.Images.Media.TITLE, photoName); 49 contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/*"); 50 m_uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); 51 Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 52 intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, m_uri); 53 54 // ギャラリー用のIntent作成 55 Intent intentGallery; 56 if (Build.VERSION.SDK_INT < 19) { 57 intentGallery = new Intent(Intent.ACTION_GET_CONTENT); 58 intentGallery.setType("image/*"); 59 } else { 60 intentGallery = new Intent(Intent.ACTION_OPEN_DOCUMENT); 61 intentGallery.addCategory(Intent.CATEGORY_OPENABLE); 62 intentGallery.setType("image/jpeg"); 63 } 64 Intent intent = Intent.createChooser(intentCamera, "画像の選択"); 65 intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {intentGallery}); 66 startActivityForResult(intent, REQUEST_CHOOSER); 67 } 68 @Override 69 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 70 super.onActivityResult(requestCode, resultCode, data); 71 72 if(requestCode == REQUEST_CHOOSER) { 73 74 if(resultCode != RESULT_OK) { 75 // キャンセル時 76 return ; 77 } 78 79 Uri resultUri = (data != null ? data.getData() : m_uri); 80 81 if(resultUri == null) { 82 // 取得失敗 83 return; 84 } 85 86 MediaScannerConnection.scanFile( 87 this, 88 new String[]{resultUri.getPath()}, 89 new String[]{"image/jpeg"}, 90 null 91 92 ); 93 94 // 画像を設定 95 ImageView imageView = (ImageView)findViewById(R.id.imageView); 96 imageView.setImageURI(resultUri); 97 98 99 100 101 102 } 103 104 try { 105 // sdcardフォルダを指定 106 File root = Environment.getExternalStorageDirectory(); 107 108 // 日付でファイル名を作成  109 Date mDate = new Date(); 110 SimpleDateFormat fileName = new SimpleDateFormat("yyyyMMdd_HHmmss"); 111 112 // 保存処理開始 113 FileOutputStream fos = null; 114 fos = new FileOutputStream(new File(root, fileName.format(mDate) + ".jpg")); 115 116 // jpegで保存 117 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 118 119 // 保存処理終了 120 fos.close(); 121 122 //OpenCVに読み込み 123 Mat mat_src = new Mat(); 124 mat_src = Imgcodecs.imread(fileName.format(mDate) + ".jpg"); 125 126 } catch (Exception e) { 127 Log.e("Error", "" + e.toString()); 128 } 129 130} 131

試したこと

ファイル名には日付で作られたものが入る様にしましたが、保存処理でどうしてもエラーが出てしまいました。

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

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

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

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

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

hoshi-takanori

2020/04/17 10:26

ギャラリーから取得した画像はファイルではない (ファイルには直接アクセスできない) ので、いったん一時ファイルに書き出して、そのパスを指定する必要があります。
tukim

2020/07/11 22:56

ありがとうございます。なんとかできました。
guest

回答1

0

自己解決

こちらの記事
のようにやるとできました

投稿2020/10/02 00:08

tukim

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問