Problème d'orientation de la caméra OpenCV
J'ai un projet simple qui vient de montrer à la caméra avec org.opencv.android.JavaCameraView.
mon problème est qu'à défaut de l'appareil photo est en mode paysage et je ne peux pas changer cette raison que j'ai besoin de définir CameraBridgeViewBase au lieu d'un appareil photo classique intention.
c'est une partie de mon code:
Code XML:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<org.opencv.android.JavaCameraView
android:layout_width="fill_parent"
android:layout_height="300dp"
android:visibility="gone"
android:id="@+id/HelloOpenCvView"
opencv:show_fps="true"
opencv:camera_id="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/BtnVideo"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:layout_width="0dp"
style="@style/button"
android:layout_height="wrap_content"
android:layout_weight="1.00"
android:text="@string/videoBtn"
android:textSize="18dip" />
</LinearLayout>
De Code Java :
CameraBridgeViewBase mOpenCvCameraView;
Button VideoButton;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
overridePendingTransition(0, 0);
VideoButton = (Button) this.findViewById(R.id.BtnVideo);
VideoButton.setOnClickListener(onClickListener);
mOpenCvCameraView= (CameraBridgeViewBase) findViewById(R.id.HelloOpenCvView);
mOpenCvCameraView.setVisibility(SurfaceView.INVISIBLE);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.BtnVideo:
if(mOpenCvCameraView.getVisibility() == SurfaceView.VISIBLE)
{
mOpenCvCameraView.setVisibility(SurfaceView.INVISIBLE);
}
else
{
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
}
break;
default :
break;
}
}
};
public void onResume() {
super.onResume();
overridePendingTransition(0, 0);
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}
public void onPause()
{
super.onPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
public void onDestroy() {
super.onDestroy();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
public void onCameraViewStarted(int width, int height) {
}
public void onCameraViewStopped() {
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
return inputFrame.rgba();
}
private 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;
}
}
};
Alors, comment puis-je changer l'orientation par défaut?
Merci!
source d'informationauteur user2235615
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai trouvé cette solution:
J'obtiens d'abord dans JavaCameraView.Java Classe dans la Bibliothèque OpenCV - 2.4.5
puis dans initializeCamera fonction avant mCamera.startPreview(); j'ai ajouté cette fonction 2:
et de la première fonction comme ceci:
J'ai simplement rappeler que je travaille avec OpenCV.
Espère que cela aide quelqu'un.
Essayer celui-ci sur votre onCameraFrame
Le problème est que le code que les peintures ne vérifie pas l'appareil photo params. Le Tapis est dessiné sur la Surface d'affichage dans la fonction "deliverAndDrawFrame" dans la classe "CameraBridgeViewBase".
Avec un très simple modification dans la CameraBridgeViewBase de classe, nous pouvons faire une fonction qui tourne la façon dont l'image est tirée.
J'ai essayé la solution la plus courante que l'utilisation de la Base.la fonction flip qui tourne le Tapis, mais consomme beaucoup de ressources, cette solution n'a pas d'incidence sur la détection et n'affecte pas les performances, seules les modifications de la façon dont l'image est dessinée sur la toile.
Espérons que cette aide.
android:screenOrientation valeur dans la AndroidManifest.xml devrait aider.