0
私はドキュメントスキャナを開発しています。私は検出、キャプチャ、すべてを保存するようなものでこれを行いました。私はカメラのビュー画面に問題があります。それは風景モードでうまく動作していますが、私はそれを縦向きにしたい。OpenCVカメラプレビューオリエンテーションの問題
また、すべての画像処理操作を完璧に行っています。しかし、ポートレートモードでしばらくしてからアプリを再起動します。誰かがなぜ私の再起動のアプリを助けることができますか?
活動
public class OpenCvCamera extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2, View.OnClickListener, FragmentCompat.OnRequestPermissionsResultCallback {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
System.loadLibrary("opencv_java3");
}
private Mat mRgba;
private Mat mIntermediateMat;
private Mat mGray;
private Mat mRgbaT;
private Button btnCapture;
private org.opencv.core.Rect mBoundingRect;
private static final String FILE_LOCATION= Environment.getExternalStorageDirectory()+"/DocumentScan/";
private CameraBridgeViewBase mOpenCvCameraView;
BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i("TAG", "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
@Override
public void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0,
this, mLoaderCallback);
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cam);
mOpenCvCameraView = (JavaCameraView) findViewById(R.id.java_surface_view);
mOpenCvCameraView.setVisibility(View.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
btnCapture = (Button) findViewById(R.id.btnCapture);
btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String timestamp = new SimpleDateFormat("ddMMyyyy_HHmmss", Locale.US).format(new Date());
File imgFolder = new File(FILE_LOCATION);
imgFolder.mkdir();
File image = new File(imgFolder, "Scan" + timestamp + ".jpg");
String fileName = FILE_LOCATION +
"/Scan" + timestamp + ".jpg";
Toast.makeText(OpenCvCamera.this, image + " saved", Toast.LENGTH_SHORT).show();
Mat cropped = mRgbaT.submat(mBoundingRect);
Imgcodecs.imwrite(fileName, cropped);
}
}) ;
}
@Override
protected void onPause() {
super.onPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
@Override
protected void onDestroy(){
super.onDestroy();
if (mOpenCvCameraView!=null)
mOpenCvCameraView.disableView();
}
public native Rect doWithMat(long matAddrGr, long matAddrRgba);
@Override
public void onCameraViewStarted(int width, int height) {
Log.d("Width", width + "\t" + height);
mRgba = new Mat(height, width, CvType.CV_8UC4);
mIntermediateMat = new Mat(height, width, CvType.CV_8UC4);
mGray = new Mat(height, width, CV_8UC1);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
mGray.release();
mIntermediateMat.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
mGray = inputFrame.gray();
mRgbaT = mRgba.t();
Core.flip(mRgba.t(), mRgbaT, 1);
Imgproc.resize(mRgbaT, mRgbaT, mRgba.size());
mBoundingRect = doWithMat(mGray.getNativeObjAddr(), mRgbaT.getNativeObjAddr());
return mRgbaT;
}
@Override
public void onClick(View view) {
}
}