0

我正在开发一个应用程序,以使用相机预览实时检测对象,然后拍照并将其显示在其他活动中,并且将在检测到的对象上绘制边界框(大多数情况下为多边形)。

我设法做到了,一切正常。现在我正在尝试通过设置较小的相机预览尺寸并通过更改相机参数来拍摄具有更大分辨率的照片来加快检测过程。但是我将获得的坐标必须缩放以匹配大图的大小。

就我而言:

  • 相机预览尺寸始终为:640x480(坐标与此尺寸匹配)
  • 将使用此处接受的答案中提到的方法选择照片尺寸。
  • 在大多数情况下,图片尺寸会很大(在我的手机中是4260x3120),我正在调整画布的大小以适合屏幕

对于画布大小,我使用它来获取屏幕分辨率:

public static int getScreenWidth() {
    return Resources.getSystem().getDisplayMetrics().widthPixels;
}

public static int getScreenHeight() {
    return Resources.getSystem().getDisplayMetrics().heightPixels;
}

我的 xml 文件如下所示:

<LinearLayout>
     ....
    <android.support.v7.widget.Toolbar
      ....
    </android.support.v7.widget.Toolbar>

      ....
    <FrameLayout
        android:id="@android:id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp">

        <packagename.CropImageView
            android:id="@+id/scannedImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:src="@mipmap/ic_launcher_round" />

    </FrameLayout>
</LinearLayout>

在我的自定义视图类CropImageView中,我将四个坐标传递给onDraw方法并在它们之间绘制路径

注意:我看到了几个关于大致相同主题的问题,但我无法与它们联系起来,因为我无法使用像我这样的用例。非常感谢任何信息,帮助。

4

1 回答 1

0

我需要做的就是找到YX遵循这个的比例因子:

    scaleFactorY = (float) newWidth / oldWidth;
    scaleFactorX = (float) newHeight / oldHeight;

然后将坐标与这些因素相乘。此外,您需要确保preview size,picture sizecontainer将保持图片具有相同的纵横比,否则您将获得放错位置的坐标。

要获得所需的纵横比,您只需要这样做:width / height

于 2018-06-18T12:03:46.857 回答