我试图在两个不同的活动中使用ArrayList()。宣布:
public static ArrayList<Mat> Video = new ArrayList<Mat>();
我从相机读取帧,当我有50帧时,我会进入下一个活动。
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
Mat frame = inputFrame.rgba();
if(Video.size() < 50)
{
Log.i(TAG, "Added frame");
Video.add(frame);
}
else
{
String e = Integer.toString(Video.get(1).cols());
Log.v(TAG1, e);
e = Integer.toString(Video.get(1).rows());
Log.v(TAG1, e);
Intent intent = new Intent(this, Analysis.class);
startActivity(intent);
}
return inputFrame.rgba();
}
此方法的日志输出为:
11-15 22:53:30.225: V/Values(32362): 800
11-15 22:53:30.225: V/Values(32362): 480
这是正在运行的设备(Galaxy S2)的正确高度和宽度。
然后在我的下一个活动onCreate()中,我直接访问“视频”:
String e = Integer.toString(HomeScreen.Video.get(1).cols());
Log.v(TAG, e);
String h = Integer.toString(HomeScreen.Video.get(1).rows());
Log.v(TAG, h);
但这次日志上写着:
11-15 22:53:30.840: V/Values2:(32362): 800
11-15 22:53:30.840: V/Values2:(32362): 0
所以我的问题是,为什么两个日志中的row()值都不是480?我需要一个帧列表,因为我正在记录所有帧,然后在另一个Activity中我将对它们进行操作并输出显示(我需要行数)。
答案 0 :(得分:1)
我换了一行:
Video.add(frame);
使用
Video.add(frame.clone());
它完美无缺!
我认为在顶线我只复制了帧的标题部分而不是整个帧的内容。