当前位置: 首页 > 面试题库 >

Android和OpenCV-用户界面更改导致应用崩溃

牟正真
2023-03-14
问题内容

我正在使用OpenCV人脸检测制作应用程序。我想在相机图像中检测到脸部时对UI进行一些更改。

布局分为两部分,左侧是一些文本,右侧是相机图像。我想在检测到脸部时更改文本颜色。

我在onCameraFrame()方法中检测到面孔没有问题,但如果尝试从此方法更改UI元素,则应用程序将崩溃。

这是所有的样子。/ 不是真实的代码,仅是示例 /

public class MyClass extends Activity implements CvCameraViewListener
{
    private CameraBridgeViewBase mOpenCvCameraView;
    private TextView myTextElement;
    private FaceLocator faceLocator;
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_myclass);

        myTextElement = (TextView) findViewById(R.id.text_view);


        mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.my_class_face_detector_layout);
        mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
        mOpenCvCameraView.setCvCameraViewListener(this);
        mOpenCvCameraView.enableView();
    }

    @Override
    public Mat onCameraFrame(Mat inputFrame)
    {
        if (faceLocator != null) {
            bool face_detected = faceLocator.detectFaces(inputFrame);
            if (face_detected) {
                myTextElement.setTextColor(Color.GREEN);
            }
        }
        return inputFrame;
    }
}

有人可以帮忙吗?

这是堆栈跟踪…

        at android.view.ViewRootImpl.checkThread
        at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1005)
        at android.view.ViewGroup.invalidateChild(ViewGroup.java:4548)
        at android.view.View.invalidate(View.java:11095)
        at android.view.View.invalidate(View.java:11044)
        at android.widget.TextView.updateTextColors(TextView.java:3473)
        at android.widget.TextView.setTextColor(TextView.java:2663)
        at com.riteh.mateo.cameracontrol.CCSettings.onCameraFrame(CCSettings.java:186)
        at org.opencv.android.CameraBridgeViewBase$CvCameraViewListenerAdapter.onCameraFrame(CameraBridgeViewBase.java:157)
        at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:393)
        at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:346)
        at java.lang.Thread.run(Thread.java:841)

问题答案:

两天后就解决了…堆栈跟踪将我推向正确的方向。

问题是该方法在单独的线程中运行,因此我不得不使用runOnUiThread()来更改UI。

只需将onCameraFrame方法更改为此

@Override
public Mat onCameraFrame(Mat inputFrame)
{
    if (faceLocator != null) {
        bool face_detected = faceLocator.detectFaces(inputFrame);
        if (face_detected) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    myTextElement.setTextColor(Color.GREEN);
                }
            });
        }
    }
    return inputFrame;
}


 类似资料:
  • 主要内容:将Mat转换成缓冲的图像,使用AWT/Swings显示图像在前面的章节中,我们讨论了如何使用OpenCV Java库来读取和保存图像。 除此之外,我们还可以使用GUI库(如AWT/Swings和JavaFX)在单独的窗口中显示加载的图像。 将Mat转换成缓冲的图像 要读取图像,使用方法。 此方法返回以的形式读取的图像。 但是,要将此图像与GUI库(AWT/Swings和JavaFX)结合使用,应将其转换为包的类的对象。 以下是将OpenCV的对象转换为对

  • 问题内容: 我正在开发一个Android 3.1应用程序,该应用程序使用USB主机模式通过USB上的MIDI与我的键盘(Korg M3)进行通信。这是在装有Android 4.0.3的Xoom上运行的。我可以通过USB接收MIDI消息而没有任何问题,但是将音符数据发送回键盘的效果是好坏参半,延迟半秒钟后便会频繁崩溃。 这是我在点击操作栏上的按钮发送注释时不断遇到的错误: E / dalvikvm(

  • 随着xamarin的最新更新(安装了xamarin android N sdk、xamarin studio 6.1等),当设备与调试器断开连接时,我的android应用程序会崩溃。当调试器连接到设备时,它可以很好地工作。 我已经尝试过Nexus 7、三星Galaxy Note 2和Redmi Note 3。但是当我在断开设备与调试器的连接后尝试运行应用程序时,它不起作用。 共享相同的堆栈跟踪和设

  • 这里是Android开发者新手。我在MainActivity中使用recyclerview,应用程序不断崩溃。 任何帮助都将受到赞赏! 编辑:对不起,我是新来的。我已经附加了Logcat。和其他xml文件。谢谢 这是我的代码: 列出你的布局。xml: activity_main.xml: } ProductAdapter。java类: } Logcat: 致命异常:主进程:e.wolverine2

  • 我正在使用内置于Web View的Android开发浏览器。其中我面临的一个问题是,当我访问http://crashmybrowser.com测试浏览器上的选项卡崩溃时,我的整个浏览器应用程序都会崩溃。但是,当在chrome或Opera上进行相同的测试时,这些浏览器会在崩溃中幸存下来,并且只有特定的选项卡崩溃是由于访问上述网站而预期的结果。有人能帮助理解我如何在使用Webview的浏览器上处理此崩

  • 6.Android 用户界面 本章介绍Android中用户界面的构建方法。我们将在这里创建第一个Activity作为实例,体验如何使用XML描述界面布局,以及在Java中引用它的方法。随后介绍View(又称Widget,控件)和Layout(布局)的概念,以及如何在Java中捕获事件(比如单击按钮)。另外,还需要在这里导入一个三方的jar文件,用来访问 Twitter 提供的 API。 到本章结束