我拍摄了幻灯片的每张幻灯片的屏幕截图,并将它们存储在Mats的ArrayList
中,我试图查看何时到达幻灯片的末尾,因此我使用了比较功能。但是,该实现在countNonZero
函数上给出了一个例外:
E / cv :: error():OpenCV(3.4.5)错误:int断言失败(cn == 1)cv :: countNonZero(cv :: InputArray),文件/build/3_4_pack-android/opencv/modules/core/src/count_non_zero.cpp,第298行E / org.opencv.core:捕获了core :: countNonZero_10()cv :: Exception:OpenCV(3.4.5)/build/3_4_pack-android/opencv/modules/core/src/count_non_zero.cpp:298:错误:(-215:断言失败)函数'int中的cn == 1cv :: countNonZero(cv :: InputArray)'D / AndroidRuntime:关闭VME / AndroidRuntime:致命异常:main流程:com.example.autoslide,PID:27129CvException [org.opencv.core.CvException:cv :: Exception:OpenCV(3.4.5)/build/3_4_pack-android/opencv/modules/core/src/count_non_zero.cpp:298:错误:(-215:断言失败)函数'int中的cn == 1cv :: countNonZero(cv :: InputArray)']
这里是代码:
private void getScreens(WebView view) {
int i = 0;
do {
Bitmap b = Screenshot.takeScreenshot(view);
//imageView.setImageBitmap(b);
Mat mat = new Mat();
Utils.bitmapToMat(b.copy(Bitmap.Config.ARGB_8888, true), mat);
screens.add(mat);
view.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));
i++;
//System.out.println(screens.size());
} while(i <= 4 || !(matEquals(screens.get(i-1), screens.get(i-2))));
}
public static boolean matEquals(Mat img1, Mat img2){
Mat out = new Mat();
Core.compare(img1, img2, out, Core.CMP_NE);
return Core.countNonZero(out) == 0;
}
确保此处Core.compare(img1, img2, out, Core.CMP_NE);
的输出是单个通道Mat
检查文档Here