Intereting Posts

Как сопоставить координаты кадра для наложения в видении

Я чувствую, что этот Вопрос уже решен много раз, но я не могу понять это. Я в основном следовал этому маленькому учебнику о мобильном видении и завершил его. После этого я попытался обнаружить объекты самостоятельно, начиная с ColorBlob и рисовать его границы.

Идея состоит в том, чтобы начать посередине кадра (специально удерживая объект посередине камеры) и обнаруживая края этого объекта по его цвету. Он работает до тех пор, пока я держу телефон в ландшафтном режиме (Frame.ROTATION_0). Как только я нахожусь в режиме портрета (Frame.Rotation_90), ограничивающий Rect получает обратный поворот, поэтому объект с большей высотой получает больше ширины, а также бит.

Документы говорят, что детектор всегда поставляет координаты на невращающуюся вертикальную рамку, так как я должен вычислить прямоугольные прямоугольные координаты в соответствии с его вращением? Я не думаю, что это имеет большое значение, но вот как я нахожу цвет 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; } 

Затем я просто рисую его в методе рисования GraphicOverlay.Graphic на холсте. Я уже использовал методы transformX/Y на графике и думал, что он также будет учитывать поворот. Я также использую CameraSource и CameraSourcePreview предоставленный из образцов.

Solutions Collecting From Web of "Как сопоставить координаты кадра для наложения в видении"