Androidアプリを作成しようとしています。カメラのプレビューを常にポートレート モードで表示し、そのフレーム (の一部) に対して重い画像処理操作を実行します。したがって、私は OpenCV を使用しています (OpenCV4Android とネイティブ C/C++ コンポーネントの両方)。問題は、CameraBridgeViewBase または JavaCameraView クラスを使用する場合、OnCameraFrame によって返されるフレームがランドスケープ モードであることです。
ここで、Activity が横向きモードを使用するように定義されている場合 (OpenCV のサンプル アプリと同様)、プレビューは問題なく見えますが、追加の UI ビューは 90 度傾いています (前述のように、デバイスはアプリを縦向きモードで実行する必要があります)。
アクティビティが縦向きモードに設定されている場合、UI ビューは明らかに正しく見えますが、カメラのプレビューは 90 度傾いています。
OnCameraFrame の画像マトリックスを次のように操作して各フレームを回転させようとすると、次のようになります。
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Core.transpose(mRgba,mRgbaT);
Core.flip(mRgbaT, mRgbaT, -1);
Imgproc.resize(mRgbaT, mRgbaT, mRgba.size());
return mRgbaT;
}
次に、各カメラのフレームがデバイスの幅を埋めますが、高さは埋めません (その結果、引き伸ばされて見えます)。加えて、フレーム レートがかなり遅くなります。画像をフルスクリーン (または元のフレーム サイズとは異なるサイズ) にサイズ変更しようとすると、画像がまったく表示されず (黒い画面)、次の例外がスローされます。
E/CameraBridge(11183): Utils.matToBitmap() throws an exception: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean)
だから、私の質問は: OpenCV のカメラ プレビューをポートレート モードと全画面表示の両方で表示するにはどうすればよいですか?
残念ながら、私の初心者 SO の評判のため、スクリーンショットを添付できません。また、以前にSOで似たような質問があったことは承知していますが、どの回答も問題を完全に解決しているようには見えません。