2017-11-23 7 views
0

OpenCVサークルメソッドを使用してカメラフレームに円を描くことができます。さて、ここでは、私は円が異なるアンドロイドのデバイスの画面サイズに基づいて拡大することを確認したいです。それについてどうすればいいですか? これはこれまで私が試したことです。デバイスのサイズに基づいて拡大する円を描くopencv?

@Override 
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { 
     mrgba = inputFrame.rgba(); 
     // Imgproc.cvtColor(mrgba,mgray,Imgproc.COLOR_RGB2GRAY); 
     // Imgproc.Canny(mgray,mcanny,50,150); 

     Imgproc.circle (
       mrgba,     //Matrix obj of the image 
       new Point(230, 160), //Center of the circle 
       100,     //Radius 
       new Scalar(0, 0, 255), //Scalar object for color 
       10      //Thickness of the circle 
     ); 

     return mrgba; 
    } 
+3

半径を幅と高さの最小値に比例させます。また、半径に比例した厚さにします。センターはディスプレイの中心にあるはずですか?もしそうなら: 'width * .5、height * .5'(逆数を掛けるほうが分割より速い)。 –

答えて

0

Bernoulli Gateがコメント付きです。 Cameraは、640x480または550x20ではなく、640x480などの「標準」解像度のみを返すことができないため、JavaCameraViewの寸法(ピクセルまたはdp)ではなく、カメラプレビューの寸法を考慮に入れてください。 OpenCV MatオブジェクトCameraBridgeViewBase.CvCameraViewFrame inputFrame.rgba(); "OpenCV Mat pixels"の寸法はJavaCameraViewではなく、JavaCameraView( "ノンカメラプレビュー"の部分に黒い縞模様があります)ではありません。 Cameraの「標準」解像度はそれほど多くなく、この方法ですべてを得ることができます(実際にはそのメソッドは廃止されており、Camera2アプローチを使用する必要がありますが、現在もIMHOはより簡単です)。

Camera mCamera; 

mCamera = Camera.open(); 
Camera.Parameters params = mCamera.getParameters(); 
List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
for (Camera.Size size :sizes) { 
    Log.d(TAG, "size: " + size.width + "x" + size.height); 
} 

あなたのアプリよりも、カメラプレビューの可能な限りの大きさを分析し、カメラプレビューの解像度ごとにサークル設定を直接設定することができます。次のようなものがあります:

@Override 
public void onCameraViewStarted(int width, int height) { 
    if (width == 1920 && height == 1080) { 
     circleRadius = 300; circleLineWidth = 20; 
    } else if (width == 1280 && height == 720) { 
     circleRadius = 275; circleLineWidth = 18; 
    } else if (width == 1024 && height == 768) { 
     circleRadius = 250; circleLineWidth = 15; 
    } else if 
     ... 
    } else { 
     circleRadius = some_default_radius; circleLineWidth = some_default_width; 
    } 

} 

また、呼び出しによって1920x1080解像度:mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.camera_view);後とmOpenCvCameraView.enableView();呼び出し前に

mOpenCvCameraView.setMaxFrameSize(1920, 1080); 

。また、setMaxFrameSize()に任意の値を設定することができますが、その場合のカメラプレビューは(最小寸法の)「標準」解像度に最も近いものとして選択されます。 mOpenCvCameraView.setMaxFrameSize(960, 250);の場合は320x240となります。

関連する問題