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

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

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

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1199閲覧

Android Studioでの画像比較サンプルアプリ実行エラー

2r4h8k3m

総合スコア22

Java

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

Android

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2021/05/13 06:20

編集2021/05/14 06:11

【再度質問】こちらの画像比較アプリを作りたく思い、activity_main.xml とMainActivity.java(MainActivity.ktにファイル名改変)してKotlin6として実行すると、ビルドは通るのですが、アプリが繰り返し停止していますとのエラーが出てしまいます。

画像比較アプリ(Kotlin6)
https://qiita.com/pokotsun/items/f5d9cdd2cca14fd85369

HelloWorldアプリ(TestApp001)

https://akira-watson.com/android/helloworld.html

以前は掲載のソースファイルにそのまま貼り付け、確かに同じエラーは出ていたのですが、
以前AndroidXが関係しているとの回答を頂きましたので以下のURL参考にして

androidXの改変
https://akira-watson.com/android/androidx.html

ActivityMain.ktのimport android.support.v7.app.AppCompatActivityを
import androidx.appcompat.app.AppCompatActivityに改変し、

自身が画像比較アプリを貼り付けるする前に作ったアプリはAndroidX対応のなっており、比較アプリは古い文献でAndroidX対応になっていないのだと自分なりに解釈し、

貼り付ける前にAndroidX対応になっていると予測したTestAppアプリの書き方を出来るだけ残した貼り付けの仕方でKotlin6を作成しました。ですがおなじエラーがでます。

Kotlin6 MainActivity.xml(自分で記載のURLよりソース改変)

package com.example.kotlin6; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.app.Activity import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.drawable.BitmapDrawable import android.net.Uri import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.ParcelFileDescriptor import android.util.Log import android.widget.ImageView import kotlinx.android.synthetic.main.activity_main.* import org.opencv.android.OpenCVLoader import org.opencv.android.Utils import org.opencv.core.* import org.opencv.features2d.AKAZE import org.opencv.features2d.DescriptorMatcher import org.opencv.features2d.Features2d import org.opencv.imgproc.Imgproc import java.io.FileDescriptor import java.io.IOException public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(!OpenCVLoader.initDebug()) { Log.d("OpenCV", "error_openCV") } // 画像選択ボタン1のリスナー select_img1_btn.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.setType("*/*") startActivityForResult(intent, RESULT_PICK_IMAGEFILE1) } // 画像選択ボタン2のリスナー select_img2_btn.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.setType("*/*") startActivityForResult(intent, RESULT_PICK_IMAGEFILE2) } // 決定ボタンのリスナー decition_btn.setOnClickListener { try { // src_img1の画像をMatに var bitmap: Bitmap = Bitmap.createScaledBitmap(getBitmapFromImageView(src_img1), 640, 480, false) val scene1 = Mat(bitmap!!.height, bitmap!!.width, CvType.CV_8UC1).apply { Utils.bitmapToMat(bitmap, this) } // src_img2の画像をMatに bitmap = Bitmap.createScaledBitmap(getBitmapFromImageView(src_img2), 640, 480, false) val scene2 = Mat(bitmap!!.height, bitmap!!.width, CvType.CV_8UC1).apply { Utils.bitmapToMat(bitmap, this) } // アルゴリズムはAKZEで val algorithm: AKAZE = AKAZE.create() // 特徴点抽出 val keypoint1 = MatOfKeyPoint().apply { algorithm.detect(scene1, this) } val keypoint2 = MatOfKeyPoint().apply { algorithm.detect(scene2, this) } // 特徴量記述 val descriptor1 = Mat().apply { algorithm.compute(scene1, keypoint1, this) } val descriptor2 = Mat().apply { algorithm.compute(scene2, keypoint2, this) } // マッチング (アルゴリズムにはBruteForceを使用) val matcher = DescriptorMatcher.create("BruteForce") var matches_list: MutableList<DMatch> = mutableListOf() val match12 = MatOfDMatch().apply { matcher.match(descriptor1, descriptor2, this) } val match21 = MatOfDMatch().apply { matcher.match(descriptor2, descriptor1, this) } // クロスチェック(1→2と2→1の両方でマッチしたものだけを残して精度を高める) val size: Int = match12.toArray().size - 1 val match12_array = match12.toArray() val match21_array = match21.toArray() var count: Int = 0 for(i in 0..size) { val forward: DMatch =match12_array[i] val backward: DMatch = match21_array[forward.trainIdx] if(backward.trainIdx == forward.queryIdx) { matches_list.add(forward) count++ } } val matches = MatOfDMatch().apply { this.fromList(matches_list) } // 結果画像の背景真っ黒になるのを防ぐ val scene1rgb = Mat().apply { Imgproc.cvtColor(scene1, this, Imgproc.COLOR_RGBA2RGB, 1) } val scene2rgb = Mat().apply { Imgproc.cvtColor(scene2, this, Imgproc.COLOR_RGBA2RGB, 1) } // マッチ結果を出力 val dest = scene1.clone().apply { Features2d.drawMatches(scene1rgb, keypoint1, scene2rgb, keypoint2, matches, this) } val result_btm: Bitmap = Bitmap.createBitmap(dest.cols(), dest.rows(), Bitmap.Config.ARGB_8888) .apply { Utils.matToBitmap(dest, this) } // マッチング結果画像の出力 result_img.setImageBitmap(result_btm) // マッチング数を出力 count_txt.text = "マッチング数: ${count}" } catch(e: NullPointerException) { e.printStackTrace() } } } // 画像を選択したときの動き override fun onActivityResult(requestCode: Int, resultCode: Int, resultdata: Intent?) { if((requestCode == RESULT_PICK_IMAGEFILE1 || requestCode == RESULT_PICK_IMAGEFILE2) && resultCode == Activity.RESULT_OK) { val image_view: ImageView = if(requestCode == RESULT_PICK_IMAGEFILE1) src_img1 else src_img2 if(resultdata?.data != null) { try { val uri: Uri = resultdata.data val parcelFileDesc: ParcelFileDescriptor = getContentResolver().openFileDescriptor(uri, "r") val fDesc: FileDescriptor = parcelFileDesc.fileDescriptor val bmp: Bitmap = BitmapFactory.decodeFileDescriptor(fDesc) parcelFileDesc.close() image_view.setImageBitmap(bmp) } catch(e: IOException) { e.printStackTrace() } } } } // 画像を選択したときの動き override fun onActivityResult(requestCode: Int, resultCode: Int, resultdata: Intent?) { if((requestCode == RESULT_PICK_IMAGEFILE1 || requestCode == RESULT_PICK_IMAGEFILE2) && resultCode == Activity.RESULT_OK) { val image_view: ImageView = if(requestCode == RESULT_PICK_IMAGEFILE1) src_img1 else src_img2 if(resultdata?.data != null) { try { val uri: Uri = resultdata.data val parcelFileDesc: ParcelFileDescriptor = getContentResolver().openFileDescriptor(uri, "r") val fDesc: FileDescriptor = parcelFileDesc.fileDescriptor val bmp: Bitmap = BitmapFactory.decodeFileDescriptor(fDesc) parcelFileDesc.close() image_view.setImageBitmap(bmp) } catch(e: IOException) { e.printStackTrace() } } } } // BitmapをImageViewから取得する private fun getBitmapFromImageView(view: ImageView): Bitmap { view.getDrawingCache(true) return (view.drawable as BitmapDrawable)?.let { it.bitmap } } companion object { private val RESULT_PICK_IMAGEFILE1: Int = 1001 private val RESULT_PICK_IMAGEFILE2: Int = 1002 } }

文字数最大数行きましたので、Android Studioでの画像比較サンプルアプリ実行エラー 2の方にKotlin6 activity_main.xml、TestApp001のMainActivity.Javaとactivity_main.xmlのソース掲載しております。

時間がある方いらっしゃればご回答お願い致します。

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

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

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

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

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

hoshi-takanori

2021/05/13 12:24

他人が作ったものをコピペして動かしても、「他人が作ったものを動かしてる」のであって、「自分が作ったアプリ」とは言えませんが、それはさておき、アプリが繰り返し停止していますとのエラーが出るなら、たぶん Logcat にエラーメッセージが出てると思うので、そちらをご確認ください。 https://developer.android.com/studio/debug/am-logcat?hl=ja
2r4h8k3m

2021/05/14 06:42

いつもご回答ありがとうございます、不快に沢山の方させてしまったようで申し訳ありません。こちらのdeveloperサイトで何度かこの作業の前に開きアプリ作成でメソッドを組み立てようとしたのですが、上手くいかずこの掲載サイト利用させて頂いておりました。出来上がったソース何度かパターン見ることで勉強させて頂いております。失礼いたしました。 logcat開くと確かにFailed to open handle to diag driverなどのエラー出ていて検索かけたり訳したりしたのですがよく意味が分からず、MainActivity.ktでLog.d("OpenCV", "error_openCV") に対応して出力されているのかなとまでは検討ついたのですが、まずはOpenCV以外のLogcatに慣れようとhttps://www.javadrive.jp/android/log/index2.htmlこちらのサイトのアプリ作ってみたりしたのですがそれも通らなかったりして苦戦しております、、 道筋的な物を示して頂き感謝しております。
hoshi-takanori

2021/05/14 16:40

Logcat ですが、自分で Log.d しなくても、アプリが落ちる場合はスタックトレースというものが出てるはずなので、それを丸ごと貼ってください。Logcat には他にも大量にログが出るので慣れないと戸惑うと思いますが、スタックトレースというのは例えばこの質問 https://teratail.com/questions/337638 の最後に貼ってあるやつです。
2r4h8k3m

2021/05/15 02:39

昨日見つけられなかったのですが、エラー該当箇所(スタックトレース?)のような場所を見つけました!       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2682)         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)         at android.app.ActivityThread.-wrap11(Unknown Source:0)         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1592)         at android.os.Handler.dispatchMessage(Handler.java:106)         at android.os.Looper.loop(Looper.java:164)         at android.app.ActivityThread.main(ActivityThread.java:6518)         at java.lang.reflect.Method.invoke(Native Method)         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) クリックしてその部分に飛べるエラーとそうでないエラーがあるのですね。ビルドは通っているのと自分で触ってもないファイルに出ていてまた一憂しましたが、一つ一つ確認していきます。ありがとうございます。
hoshi-takanori

2021/05/15 04:06

スタックトレースで一番大事な部分は Caused by 〜 のところでエラーの種類がわかるのと、あと、at クラス名 (ファイル名: 行番号) でどこでエラーが出たかわかるので、自分の書いたクラスを見ると怪しそうな芭蕉がわかります。 あと、Logcat がいっぱいになると更新されなくなったりするので、ゴミ箱ボタンを押してクリアすると良いかも…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問