如何通过 Android intent 发送 opencv Mat 列表

how to send a list of opencv Mat via Android intent

我有一个 openCV Mat 列表,并试图将我的所有列表从 Activity1 传递到 Activity2,但我不知道如何实现它。这个我已经看过了 但是把 Mat 一个一个发过来好像不是办法

Intent i = new Intent( Activity1.this, Activity2.class );
i.putExtra("someExtra", someExtra);
i.putExtra("list", ArrayList<Mat> ); ///I wan't to do something like that.
startActivity(i);
Activity1.this.finish();


// Activity2
getIntent().getExtra("list");   // get my list

使Matclass实现parcelable接口,this is an official link.

之后,下面的代码应该可以工作了:

Intent i = new Intent( Activity1.this, Activity2.class );
i.putExtra("someExtra", someExtra);
i.putExtra("list", ArrayList<Mat> ) 

要获取数据,请使用:

 ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("list");

您需要发送构成 Mat 对象的原始对象并在另一端重建 Mat。

我自己还没有这样做,但是查看 javadoc 有几个选项:

https://docs.opencv.org/3.4/javadoc/org/opencv/core/Mat.html

一种可能是使用本机地址和地址构造函数。即:

https://docs.opencv.org/3.4/javadoc/org/opencv/core/Mat.html#%3Cinit%3E(long) & https://docs.opencv.org/3.4/javadoc/org/opencv/core/Mat.html#getNativeObjAddr()

在你的每个垫子上使用 getNativeObjAddr(一个 Int)并在你的 Intent 中存储一个 List<Int>。然后在另一边使用 Mat(Int) 构造函数重新创建 List<Mat>

如果这不起作用,请查看您如何创建 Mat 对象,如果您再次使用 byte[],请尝试在 Intent 中发送它。