Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在vision中将帧坐标映射到覆盖_Android_Camera_Drawing_Screen Rotation_Android Vision - Fatal编程技术网

Android 如何在vision中将帧坐标映射到覆盖

Android 如何在vision中将帧坐标映射到覆盖,android,camera,drawing,screen-rotation,android-vision,Android,Camera,Drawing,Screen Rotation,Android Vision,我觉得这个问题已经解决了很多次了,但我想不出来。我基本上是跟随移动愿景并完成了它。在那之后,我尝试自己检测对象,从一个ColorBlob开始并绘制其边界 这个想法是从帧的中间开始(目的是在相机的中间保持物体),用颜色来检测物体的边缘。只要我将手机保持在横向模式(Frame.ROTATION_0),它就可以工作。当我处于纵向模式(Frame.Rotation_90)时,边界矩形将被旋转绘制,因此具有更高高度的对象将以更宽的宽度绘制,同时也有一点偏移 假设检测器总是将坐标传递给未旋转的竖直框架,那么

我觉得这个问题已经解决了很多次了,但我想不出来。我基本上是跟随移动愿景并完成了它。在那之后,我尝试自己检测对象,从一个ColorBlob开始并绘制其边界

这个想法是从帧的中间开始(目的是在相机的中间保持物体),用颜色来检测物体的边缘。只要我将手机保持在横向模式(Frame.ROTATION_0),它就可以工作。当我处于纵向模式(Frame.Rotation_90)时,边界矩形将被旋转绘制,因此具有更高高度的对象将以更宽的宽度绘制,同时也有一点偏移

假设检测器总是将坐标传递给未旋转的竖直框架,那么如何计算相对于其旋转的边界矩形坐标呢? 我认为这并不重要,但下面是我如何找到颜色
Rect

public Rect getBounds(Frame frame){
  int w = frame.getMetadata().getWidth();
  int h = frame.getMetadata().getHeight();
  int scale = 50;
  int scaleX = w / scale;
  int scaleY = h / scale;
  int midX = w / 2;
  int midY = h / 2;
  float ratio = 10.0
  Rect mBoundary = new Rect();
  float[] hsv = new float[3];
  Bitmap bmp = frame.getBitmap();
  int px = bmp.getPixel(midX, midY);
  Color.colorToHSV(px, hsv);
  Log.d(TAG, "detect: mid hsv: " + hsv[0] + ", " + hsv[1] + ", " + hsv[2]);
  float hue = hsv[0];
  float nhue;
  int x, y;
  for (x = midX + scaleX; x < w; x+=scaleX){
      px = bmp.getPixel(x, midY);
      Color.colorToHSV(px, hsv);
      nhue = hsv[0];
      if (nhue <= (hue + ratio) && nhue >= (hue - ratio)){
          mBoundary.right = x
      } else {
          break;
      }
  }

  for (x = midX - scaleX; x >= 0; x-= scaleX){
      px = bmp.getPixel(x, midY);
      Color.colorToHSV(px, hsv);
      nhue = hsv[0];
      if (nhue <= (hue + ratio) && nhue >= (hue - ratio)){
          mBoundary.left = x
      } else {
          break;
      }
  }

  for (y = midY + scaleY; y < h; y+=scaleY){
      px = bmp.getPixel(midX, y);
      Color.colorToHSV(px, hsv);
      nhue = hsv[0];
      if (nhue <= (hue + ratio) && nhue >= (hue - ratio)){
          mBoundary.bottom = y;
      } else {
          break;
      }
  }

  for (y = midY - scaleY; y >= 0; y-=scaleY){
      px = bmp.getPixel(midX, y);
      Color.colorToHSV(px, hsv);
      nhue = hsv[0];
      if (nhue <= (hue + ratio) && nhue >= (hue - ratio)){
          mBoundary.top = y
      } else {
          break;
      }
  }
  return mBoundary;
}
public Rect getBounds(Frame){
int w=frame.getMetadata().getWidth();
int h=frame.getMetadata().getHeight();
int标度=50;
int scaleX=w/刻度;
int scaleY=h/刻度;
int midX=w/2;
int midY=h/2;
浮动比率=10.0
Rect mBoundary=新Rect();
浮动[]hsv=新浮动[3];
位图bmp=frame.getBitmap();
int px=bmp.getPixel(midX,midY);
彩色。彩色hsv(px,hsv);
Log.d(标记“检测:中间hsv:“+hsv[0]+”、“+hsv[1]+”、“+hsv[2]);
浮动色调=hsv[0];
浮动nhue;
int x,y;
对于(x=midX+scaleX;x=0;x-=scaleX){
px=bmp.getPixel(x,midY);
彩色。彩色hsv(px,hsv);
nhue=hsv[0];
如果(nhue=(色调比)){
mBoundary.left=x
}否则{
打破
}
}
对于(y=midY+scaleY;y=0;y-=scaleY){
px=bmp.getPixel(midX,y);
彩色。彩色hsv(px,hsv);
nhue=hsv[0];
如果(nhue=(色调比)){
mBoundary.top=y
}否则{
打破
}
}
返回日期;
}
然后我简单地在画布上用s draw方法绘制它。我已经在图形上使用了
transformX/Y
方法,并且认为它也将考虑旋转。
我还使用示例中提供的
CameraSource
CameraSourcePreview
类。

是否调用此方法来指示范围和相机方向?不,但是面和旋转有什么关系?