小编Meh*_*edi的帖子

如何使用OpenCV检测Passport页面的边界?

我正在尝试开发一种可以用相机扫描Passport页面的扫描仪.

所以从这样的Passport页面: 护照页样本

我想裁掉标记的部分.

我已经编写了使用OpenCV进行边缘检测的代码,它可以找到轮廓,然后近似最大的四边形.最后,它进行了4点透视转换,以获得图像的俯视图.边缘检测代码如下所示:

public static List<MatOfPoint> findContours(Mat src){
    Mat img = src.clone();
    src.release();
    //find contours
    double ratio = getScaleRatio(img.size());
    int width = (int) (img.size().width / ratio);
    int height = (int) (img.size().height / ratio);
    Size newSize = new Size(width, height);
    Mat resizedImg = new Mat(newSize, CvType.CV_8UC4);
    Imgproc.resize(img, resizedImg, newSize);

    Imgproc.medianBlur(resizedImg, resizedImg, 5);

    Mat cannedImg = new Mat(newSize, CvType.CV_8UC1);
    Imgproc.Canny(resizedImg, cannedImg, 70, 200, 3, true);
    resizedImg.release();

    Imgproc.threshold(cannedImg, cannedImg, 200, 255, Imgproc.THRESH_OTSU);

    Mat dilatedImg = new Mat(newSize, CvType.CV_8UC1);
    Mat morph = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, …
Run Code Online (Sandbox Code Playgroud)

c++ android opencv opencv3.0 opencv4android

8
推荐指数
1
解决办法
4378
查看次数

如何使用 Firebase 性能跟踪 Fragment 的帧指标?

适用于 Android 的 Firebase 性能监控 SDK 自动跟踪 Activity 的缓慢渲染和冻结帧。但是 Fragment 没有这样的数据。例如,如果活动A托管 3 个片段,那么它会报告活动的渲染缓慢和冻结帧,A但无法知道是哪个片段导致了这种情况。有没有办法为片段实现类似的屏幕跟踪?

android android-fragments firebase firebase-performance

8
推荐指数
1
解决办法
586
查看次数

在运行android 2.3.3的设备中获取'java.lang.IllegalArgumentException:无法在此处使用FLAG_RECEIVER_BOOT_UPGRADE'

我有一个活动,允许用户通过选择日期和时间来安排事件.我已经使用AlarmManager完成了它

Intent i=new Intent(context, AlarmReceiver.class);
i.putExtra("status",status);
i.putExtra("mode",mode);
PendingIntent p=PendingIntent.getBroadcast(context, id, i, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarms.set(AlarmManager.RTC_WAKEUP, sched_time, p);
Run Code Online (Sandbox Code Playgroud)

在广播接收器中,启动了一个新的活动

    @Override
    public void onReceive(Context context, Intent data) {
    // Start the scheduled post
    String status=data.getExtras().getString("status");
    int mode=data.getExtras().getInt("mode");

    Intent i=new Intent(context,PostScheduled.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putExtra("status", status);
    i.putExtra("mode", mode);

    context.startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)

在模拟器中,这段代码运行正常,但在实际设备中(运行android 2.3.3)它崩溃了

PendingIntent p=PendingIntent.getBroadcast(context, id, i, PendingIntent.FLAG_CANCEL_CURRENT);
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪

java.lang.IllegalArgumentException: Can't use FLAG_RECEIVER_BOOT_UPGRADE here
at android.os.Parcel.readException(Parcel.java:1326)
at android.os.Parcel.readException(Parcel.java:1276)
at android.app.ActivityManagerProxy.getIntentSender(ActivityManagerNative.java:2254)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:230)
at com.social.autofunnystatus.ScheduleDialog.onClick(ScheduleDialog.java:158)
at android.view.View.performClick(View.java:2538)
at android.view.View$PerformClick.run(View.java:9152)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at …
Run Code Online (Sandbox Code Playgroud)

android alarmmanager android-pendingintent

1
推荐指数
1
解决办法
2089
查看次数