android - 在 OpenCV Camera Android Fragment 中未调用 onCameraFrame 函数
问题描述
我在 Android 中有一个应用程序,它使用 OpenCV CvCameraViewListener2 来访问 Android 相机。当我从 MainActivity 实现 CvCameraViewListener2 时,此应用程序运行良好,并且我能够看到我的相机的输出。但是,当我从片段实现 CvCameraViewListener2 时,即使没有错误消息并且正在找到 OpenCV 库,也不会调用 onCameraFrame。
片段代码:
public class FdActivity extends Fragment implements CvCameraViewListener2
{
private static final String TAG = "CameraViewFragment";
private CameraBridgeViewBase mOpenCvCameraView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_fd_activity,
container, false);
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_FULLSCREEN);
getActivity().setContentView(R.layout.fragment_fd_activity);
mOpenCvCameraView = (CameraBridgeViewBase) getActivity().findViewById(R.id.fd_activity_surface_view);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, getActivity(), mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
return rootView;
}
public FdActivity()
{
// TODO Auto-generated constructor stub
}
@Override
public void onDestroy()
{
super.onDestroy();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
@Override
public void onPause()
{
super.onPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
@Override
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, getActivity(), mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
@Override
public void onCameraViewStarted(int width, int height)
{
// TODO Auto-generated method stub
}
@Override
public void onCameraViewStopped()
{
// TODO Auto-generated method stub
}
@Override
public Mat onCameraFrame(CvCameraViewFrame inputFrame)
{
// TODO Auto-generated method stub
Log.d(TAG, "got here");
Log.d(TAG, Integer.toString(inputFrame.rgba().channels()));
return inputFrame.rgba();
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(getActivity())
{
@Override
public void onManagerConnected(int status)
{
switch (status)
{
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded Successfully");
//System.loadLibrary("native-lib");
mOpenCvCameraView.enableView();
}
break;
default:
{
super.onManagerConnected(status);
}
break;
}
}
};
}
对应的XML代码:
<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:id="@+id/fd_activity_surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:visibility="gone" />
</LinearLayout>
我不确定为什么片段代码不起作用,即使在 Activity 中完成完全相同的事情也是如此。
解决方案
推荐阅读
- python - 没有极值的直方图均衡
- google-apps-script - 我可以设置一个谷歌表来接收来自外部 webhook/PUSH API 的数据吗
- bootstrap-4 - Github.blog 网站使用的主题是否可以下载?
- ios - 如何在xamarin ios中删除安全区域边距
- angular - 离子 4 选项卡 ionViewWillEnter 在设备 readyReady 事件之前触发
- ios - 如何通过单击按钮在 Swift UI 中从一个视图导航到另一个视图
- go - 这个接口和私有数据类型模式的概念是什么
- azure - 无法从超级账本结构中的通道获取块
- javascript - 将掩码添加到 Google Charts AreaChart
- video-streaming - 我们如何在 Shaka 播放器中获取当前渲染流的详细信息?