I am trying to hide android camera preview in opencv. I am using opencv3.1.0 for android(java binding library) with xamarin c#. I look up all questions here but i couldt do this. In my view I have org.opencv.android.JavaCameraView in my Activity onCreate method I get it with CameraBridgeViewBase if I change visibility of it to GONE or Invisible, OnCameraFrame method is not firing. And If I return null in OnCameraFrame method it is working preview is not showing but other components in view(textview,button) not showing too. I need to hide camera preview but still receive preview callback with opencv4android.
In My View
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.opencv.android.JavaCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/game_screen_surface_view" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/game_screen_text_view" />
</LinearLayout>
In My Activity
[Activity(Label = "GameActivity")]
public class GameActivity : Activity, CameraBridgeViewBase.ICvCameraViewListener2
{
private CameraBridgeViewBase mOpenCvCameraView;
private Mat mIntermediateMat;
private TextView _wordText;
private Callback mLoaderCallback;
private int tryCount = 15;
private int currentTry = 0;
private int circleCount = 0;
Dictionary<int, char> letters = new Dictionary<int, char>();
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Window.AddFlags(WindowManagerFlags.KeepScreenOn);
SetContentView(Resource.Layout.game_screen);
mOpenCvCameraView = FindViewById<CameraBridgeViewBase>(Resource.Id.game_screen_surface_view);
_wordText = FindViewById<TextView>(Resource.Id.game_screen_text_view);
mOpenCvCameraView.Visibility = ViewStates.Visible;//If set GONE or Invisible OnCameraFrame Method not firing
mOpenCvCameraView.SetCvCameraViewListener2(this);
mLoaderCallback = new Callback(this, mOpenCvCameraView);
}
protected override void OnPause()
{
base.OnPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.DisableView();
}
protected override void OnResume()
{
base.OnResume();
if (!OpenCVLoader.InitDebug())
{
OpenCVLoader.InitAsync(OpenCVLoader.OpencvVersıon300, this, mLoaderCallback);
}
else
{
mLoaderCallback.OnManagerConnected(LoaderCallbackInterface.Success);
}
}
protected override void OnDestroy()
{
base.OnDestroy();
if (mOpenCvCameraView != null)
mOpenCvCameraView.DisableView();
}
public Mat OnCameraFrame(CameraBridgeViewBase.ICvCameraViewFrame inputFrame)
{
Mat rgba = inputFrame.Rgba();
Mat mat = rgba;
//some opengl code.
return mat; //If I return null preview is not showing but If ay add button to view it is not showing too
}
public void OnCameraViewStarted(int width, int height)
{
mIntermediateMat = new Mat();
}
public void OnCameraViewStopped()
{
// Explicitly deallocate Mats
if (mIntermediateMat != null)
mIntermediateMat.Release();
mIntermediateMat = null;
}
private char GetLetter(int r = 0, int g = 0, int b = 0)
{
return letters[getEqualofRGB(0, 0, 2)];
}
}
class Callback : BaseLoaderCallback
{
private readonly CameraBridgeViewBase mOpenCvCameraView;
public Callback(Context context, CameraBridgeViewBase cameraView)
: base(context)
{
mOpenCvCameraView = cameraView;
}
public override void OnManagerConnected(int status)
{
switch (status)
{
case LoaderCallbackInterface.Success:
{
mOpenCvCameraView.EnableView();
}
break;
default:
{
base.OnManagerConnected(status);
}
break;
}
}
}
Thanks a lot.
You can set your preview (in this case a CameraBridgeViewBase
) transparent by setting the alpha value of the view, with 0 being completely invisible.
mOpenCvCameraView.setAlpha(0);
This should make your preview "disappear".
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.