2016-09-19 4 views
3

Я пытаюсь найти контуры из необработанных байтов, полученных из onPreviewFrame. Полученные эти необработанные байты не вращаются, когда мы делаем setDisplayOrientation (в соответствии с документами разработчиков Android). Слишком сложно поворачивать контуры. Как эффективно повернуть эти байты, а затем обработать его? Я использую openCV для поиска контуров.Обработка изображений в onPreviewFrame

@Override 
    public void onPreviewFrame(byte[] data, Camera camera) { 
     previewSize = cameraConfigUtil.cameraInstance.getParameters().getPreviewSize(); 
     Mat srcMat = new Mat(previewSize.height, previewSize.width, CvType.CV_8UC3); 
     srcMat.put(0, 0, data); 
     rect = ImageCorrection.getLargestContour(data, previewSize.height, previewSize.width); 
     android.graphics.Rect rectangle = new android.graphics.Rect(); 
     rectangle.left = rect.x; 
     rectangle.top = rect.y; 
     rectangle.right = rect.x + rect.width; 
     rectangle.bottom = rect.y + rect.height; 
     mOverlay.clear(); 
     BarcodeGraphic graphic = new BarcodeGraphic(mOverlay); 
     mOverlay.add(graphic); 
     graphic.updateItem(rectangle); 
     Imgproc.rectangle(srcMat, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(255, 0, 0, 255), 3); 
     Utils.matToBitmap(srcMat, bitmap); 
    } 

Здесь прямоугольник дает четыре точки контура, я хочу, чтобы это быть повернуто в зависимости от угла, установленного в setDisplayOrientation.

ответ

0

Вращение вокруг точки - довольно стандартный геометрический процесс. Списывание из this answer:

Пути вращаться по точке arbitraty сначала вычитает точка координат, сделать поворот вокруг начала координат, а затем добавить точку координаты.

x2 = px + (x1-px)*cos(q)-(y1-py)*sin(q) 
y2 = py + (x1-px)*sin(q)+(y1-py)*cos(q) 

где рх, р является точка вращения координат, а x1, y1 оригинальных 2D форм вершин и х2, у2 повернутых координаты, и д угла в радианах.

Я бы предположил, что наиболее эффективным способом сделать это было бы применить преобразование к 4 вершинам, а затем нарисовать новый прямоугольник на повернутом холсте.

Смежные вопросы