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

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

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

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

Java

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

Android

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

Kotlin

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

Q&A

0回答

271閲覧

Android版OpenCVで画像を並べて表示

kiritsukiR

総合スコア22

OpenCV

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

Java

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

Android

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

Kotlin

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

0グッド

0クリップ

投稿2018/08/13 10:47

OpenCV 3.4.2を使用してAndroidでカメラ画像を加工し、その過程を左右に並べて表示しようとしています。
そのための足掛かりとしてまずは同じ画像を左右に並べようとしています。
SDKに付属しているサンプルを参考に単純にCameraBridgeViewBaseを2つに増やしてみましたが、以下の画像に示す通り上手くいきませんでした。

起動直後は次の画像のようになり、右側のビューのみが有効化しました。
左側には間違いなくビューが存在することは確認済みです。
起動直後

そこで左右それぞれについてenableViewdisableViewを行うボタンを設置して操作すると左側のビューも動作しました。
しかし今度は右側のビューの更新が停止してしまいました。
画像だと分かりにくいですが、次の画像は右側はそのまま、左側のみが更新されている様子を撮影したものです。
片方のみ更新される様子

左右のビューを同時に更新するにはどうすればいいでしょうか。
(それともそもそもできないのでしょうか。)

kotlin

1import android.app.Activity 2import android.os.Bundle 3import android.util.Log 4import kotlinx.android.synthetic.main.activity_main.* 5import org.opencv.android.BaseLoaderCallback 6import org.opencv.android.CameraBridgeViewBase 7import org.opencv.android.LoaderCallbackInterface 8import org.opencv.android.OpenCVLoader 9import org.opencv.core.CvType 10import org.opencv.core.Mat 11import org.opencv.core.Size 12import org.opencv.imgproc.Imgproc 13 14class MainActivity : Activity() { 15 // 画面左のビュー 16 private lateinit var mOpenCvCameraView: CameraBridgeViewBase 17 // 画面右のビュー 18 private lateinit var mOpenCvCameraView2: CameraBridgeViewBase 19 // 準備完了を受け取るコールバック 20 private val mLoaderCallback = object : BaseLoaderCallback(this) { 21 override fun onManagerConnected(status: Int) { 22 when (status) { 23 LoaderCallbackInterface.SUCCESS -> { 24 // 左側の表示を開始 25 Log.d("LEFT", "before enableView()") 26 mOpenCvCameraView.enableView() 27 mOpenCvCameraView.enableFpsMeter() 28 Log.d("LEFT", "after enableView()") 29 // 右側の表示を開始 30 Log.d("RIGHT", "before enableView()") 31 mOpenCvCameraView2.enableView() 32 mOpenCvCameraView2.enableFpsMeter() 33 Log.d("RIGHT", "after enableView()") 34 35 // 最後に有効化したものだけ有効になるという仮説の下 36 // 上の2つの順番を入れ替えたが、最初に有効になるビューは右のまま変わらず。 37 } 38 else -> { 39 super.onManagerConnected(status) 40 } 41 } 42 } 43 } 44 45 override fun onCreate(savedInstanceState: Bundle?) { 46 super.onCreate(savedInstanceState) 47 setContentView(R.layout.activity_main) 48 49 mOpenCvCameraView = findViewById(R.id.java_camera_view) 50 mOpenCvCameraView.setCvCameraViewListener(CameraListener("LEFT")) 51 52 mOpenCvCameraView2 = findViewById(R.id.java_camera_view2) 53 mOpenCvCameraView2.setCvCameraViewListener(CameraListener("RIGHT")) 54 55 // 以下テスト用のボタン類 56 57 bt_left_e.setOnClickListener { 58 mOpenCvCameraView.enableView() 59 } 60 61 bt_right_e.setOnClickListener { 62 mOpenCvCameraView2.enableView() 63 } 64 65 bt_left_d.setOnClickListener { 66 mOpenCvCameraView.disableView() 67 } 68 69 bt_right_d.setOnClickListener { 70 mOpenCvCameraView2.disableView() 71 } 72 } 73 74 override fun onPause() { 75 super.onPause() 76 mOpenCvCameraView.disableView() 77 mOpenCvCameraView2.disableView() 78 } 79 80 override fun onResume() { 81 super.onResume() 82 if (OpenCVLoader.initDebug()) { 83 mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS) 84 } else { 85 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0, this, mLoaderCallback) 86 } 87 } 88 89 override fun onDestroy() { 90 super.onDestroy() 91 mOpenCvCameraView.disableView() 92 mOpenCvCameraView2.disableView() 93 } 94 95 class CameraListener(val tag: String) : CameraBridgeViewBase.CvCameraViewListener2 { 96 private lateinit var edgeMat: Mat 97 private lateinit var dilatedMat: Mat 98 private lateinit var denoisedMat: Mat 99 private lateinit var colorMat: Mat 100 private lateinit var dilateKernel: Mat 101 102 override fun onCameraViewStarted(width: Int, height: Int) { 103 Log.d(tag, "onCameraViewStarted($width, $height)") 104 105 edgeMat = Mat(width, height, CvType.CV_8UC1) 106 dilatedMat = Mat(width, height, CvType.CV_8UC1) 107 denoisedMat = Mat(width, height, CvType.CV_8UC1) 108 colorMat = Mat(width, height, CvType.CV_8UC3) 109 dilateKernel = Mat() 110 } 111 112 override fun onCameraViewStopped() { 113 Log.d(tag, "onCameraViewStopped()") 114 115 edgeMat.release() 116 dilatedMat.release() 117 denoisedMat.release() 118 colorMat.release() 119 dilateKernel.release() 120 } 121 122 override fun onCameraFrame(inputFrame: CameraBridgeViewBase.CvCameraViewFrame): Mat { 123 Log.d(tag, "onCameraFrame(inputFrame)") 124 // エッジ抽出 125 Imgproc.Canny(inputFrame.gray(), edgeMat, 80.0, 100.0) 126 // 膨張 127 Imgproc.dilate(edgeMat, dilatedMat, dilateKernel) 128 // ぼかし 129 Imgproc.GaussianBlur(dilatedMat, denoisedMat, Size(3.0, 3.0), 10.0) 130 //色変換 131 Imgproc.applyColorMap(denoisedMat, colorMat, Imgproc.COLORMAP_SUMMER) 132 return colorMat //一連の加工はテストで深い意味は無し 133 } 134 } 135} 136

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問