gpt4 book ai didi

android - OpenCV 相机方向问题

转载 作者:可可西里 更新时间:2023-11-01 18:49:36 30 4
gpt4 key购买 nike

我有一个简单的项目,只用 org.opencv.android.JavaCameraView 显示相机。

我的问题是默认情况下相机处于横向模式并且我无法更改此原因我需要定义 CameraBridgeViewBase 而不是常规相机 Intent 。

这是我的代码的一部分:

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>

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;
}
}
};

那么如何更改默认方向呢?

谢谢!

最佳答案

好的,我发现这是一个解决方案:

首先,我进入 OpenCV 库 - 2.4.5 中的 JavaCameraView.java

然后在 mCamera.startPreview(); 之前的 initializeCamera() 函数中,我添加了这两个函数:

            setDisplayOrientation(mCamera, 90);
mCamera.setPreviewDisplay(getHolder());

第一个函数是这样实现的:

protected void setDisplayOrientation(Camera camera, int angle){
Method downPolymorphic;
try
{
downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
if (downPolymorphic != null)
downPolymorphic.invoke(camera, new Object[] { angle });
}
catch (Exception e1)
{
e1.printStackTrace();
}
}

我只是想提醒一下,我使用的是 OpenCV。

希望这对某人有所帮助。

关于android - OpenCV 相机方向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16669779/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com