Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用OpenCV onPictureTaken处理图像?_Android_Opencv_Opencv3.1 - Fatal编程技术网

Android 如何使用OpenCV onPictureTaken处理图像?

Android 如何使用OpenCV onPictureTaken处理图像?,android,opencv,opencv3.1,Android,Opencv,Opencv3.1,我一直在尝试在拍照后立即处理图像,即在onPictureTaken()回调中。据我所知,我应该将字节数组转换为OpenCV矩阵,但当我尝试这样做时,整个应用程序都冻结了。基本上我所做的就是: @Override public void onPictureTaken(byte[] bytes, Camera camera) { Log.w(TAG, "picture taken!"); if (bytes != null) { Bitmap image = Bit

我一直在尝试在拍照后立即处理图像,即在
onPictureTaken()
回调中。据我所知,我应该将字节数组转换为OpenCV矩阵,但当我尝试这样做时,整个应用程序都冻结了。基本上我所做的就是:

@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
    Log.w(TAG, "picture taken!");

    if (bytes != null) {
        Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        Mat matImage = new Mat();

        // This is where my app freezes.
        Utils.bitmapToMat(image, matImage);

        Log.w(TAG, matImage.dump());
    }

    mCamera.startPreview();
    mCamera.setPreviewCallback(this);
}
有人知道它为什么会冻结以及如何解决吗

注意:我使用了OpenCV4Android教程3作为基础

更新1:我还尝试按如下方式解析字节(未成功):

Mat mat = Imgcodecs.imdecode(
    new MatOfByte(bytes), 
    Imgcodecs.CV_LOAD_IMAGE_UNCHANGED
);
更新2:这应该是可行的,但对我来说不是

Mat mat = new Mat(1, bytes.length, CvType.CV_8UC3);
mat.put(0, 0, bytes);
这一变体也没有:

Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC1);
mat.put(0, 0, bytes);
更新3:这对我也不起作用:

Mat mat = new MatOfByte(bytes);

我的一位同事帮了我一些忙。他通过以下操作解决了问题:

BitmapFactory.Options opts = new BitmapFactory.Options(); // This was missing.
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, opts);

Mat mat = new Mat();
Utils.bitmapToMat(bitmap, mat);

// Note: when the matrix is to large mat.dump() might also freeze your app.
Log.w(TAG, mat.size()); 
希望这将有助于你们所有的人谁也与此斗争