0

各位早上好。

我正在 Android 环境中开发一个应用程序,它从视频流中捕获帧,以便处理它们,然后在屏幕上显示处理后的帧。如果设备有两个摄像头,此应用程序允许在前置摄像头和后置摄像头之间切换。

摄像机之间的切换一直有效,直到我创建了后台处理线程(asynktask)。该程序在线程的引入和执行中正常工作,但是如果我尝试更换相机,它会崩溃。在 asynktask 中,我只执行以下操作:调整框架大小,计算调整大小的框架上的一些点,根据原始框架的大小缩放点,在屏幕上显示原始框架并在其上打印重新计算的点。

如果我尝试进行切换,我在 logcat 中得到的错误是:

07-02 11:14:41.649: ERROR/AndroidRuntime(16778): FATAL EXCEPTION: pool-1-thread-3
    java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:299)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
    at java.util.concurrent.FutureTask.run(FutureTask.java:239)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
    at java.lang.Thread.run(Thread.java:856)
    Caused by: CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/imgwarp.cpp:1723: error: (-215) ssize.area() > 0 in function void cv::resize(cv::InputArray, cv::OutputArray, cv::Size, double, double, int)
    ]
    at org.opencv.imgproc.Imgproc.resize_0(Native Method)
    at org.opencv.imgproc.Imgproc.resize(Imgproc.java:8461)
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask.scaleImage(MainActivity.java:764)
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask$1.handleMessage(MainActivity.java:678)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask.doInBackground(MainActivity.java:736)
    at com.micaela.myapp.MainActivity$ExtractFeaturesTask.doInBackground(MainActivity.java:649)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
4

2 回答 2

0

异步任务不应直接与 onPreviewCallback() 中收到的 byte[] 一起工作。如果将像素复制到临时数组并将其传递给 AsyncTask,异常就会消失。

于 2013-07-02T11:39:20.470 回答
0

我对 logcat 中的 CvException 错误做了一些研究。您处理图像的方式似乎存在问题。图像是否被传递到异步?在验证该检查以确保所有参数都正确之后。

于 2013-07-02T09:30:46.530 回答