代码之家  ›  专栏  ›  技术社区  ›  tyczj

将Firebase MLKit边界框坐标转换为屏幕视图坐标

  •  0
  • tyczj  · 技术社区  · 5 年前

    我用的是 FirebaseVision 目标检测从 CameraX 相机预览。它是检测发现的东西,但我试图绘制的项目在相机预览检测边界框。在这样做时,firebase返回的边界框不是图像本身,也不是预览视图,因为它们出现在错误的位置。

    我从firebase得到的图像大小是 1200x1600 预览大小为 2425x1440

    0 回复  |  直到 5 年前
        1
  •  3
  •   tyczj    5 年前

    if(isPortraitMode()){
        _scaleY = overlayView.height.toFloat() / imageWidth.toFloat()
        _scaleX = overlayView.width.toFloat() / imageHeight.toFloat()
    }else{
        _scaleY = overlayView.height.toFloat() / imageHeight.toFloat()
        _scaleX = overlayView.width.toFloat() / imageWidth.toFloat()
    }
    

    现在我有了比例,我可以用firebase探测器返回边界框,然后用比例转换x和y坐标

    private fun translateX(x: Float): Float = x * _scaleX
    private fun translateY(y: Float): Float = y * _scaleY
    
    private fun translateRect(rect: Rect) = RectF(
        translateX(rect.left.toFloat()),
        translateY(rect.top.toFloat()),
        translateX(rect.right.toFloat()),
        translateY(rect.bottom.toFloat())
    )
    

    然后给出缩放的矩形坐标,然后在屏幕上绘制

    推荐文章