Как извлечь RotatedRect с помощью getRectSubPix в Android? - PullRequest
0 голосов
/ 04 марта 2019

Я успешно обнаружил объект, использующий Opencv в Android как RotatedRect, и мне нужно извлечь этот прямоугольник в новый Mat, чтобы применить к нему дополнительную обработку.

Я пытаюсь использовать функцию getRectSubPix,но я получаю черный мат в предпросмотре камеры, но без сбоев.

Вот код, который я сейчас использую

  MatOfPoint2f new_mat = new MatOfPoint2f( contours.get(largest_idx).toArray() );

    RotatedRect rbox = Imgproc.minAreaRect(new_mat);

    Point vertices [] = new Point[4];

    rbox.points(vertices);

    List<MatOfPoint> boxContours = new ArrayList<>();

    boxContours.add(new MatOfPoint(vertices));

    for(int i=0; i<4; ++i)
    {
        Imgproc.line(origMat, vertices [i], vertices [(i+1)%4], new Scalar(255,0,0));
    }

    // get angle and size from the bounding box
    double rect_angle = rbox.angle;
    Size rect_size = rbox.size;

    if (rbox.angle < -45.0) {
        rect_angle += 90.0;
        double d = rect_size.width;
        rect_size.width = rect_size.height;
        rect_size.height = d;
    }

    // get the rotation matrix
    M = Imgproc.getRotationMatrix2D(rbox.center, rect_angle, 1.0);

    // perform the affine transformation
    Imgproc.warpAffine(origMat, rotated, M, origMat.size());

    Imgproc.cvtColor(rotated, rotated, Imgproc.COLOR_BGRA2BGR);

    // crop the resulting image
    Imgproc.getRectSubPix(rotated, rect_size, rbox.center, cropped);

Я обнаружил, что getRectSubPix принимает 32-битную плавающую точку.

Я пытался преобразовать входные данные следующим образом

  rotated.convertTo(rotated, CvType.CV_32F);

Но без изменений в результатах.

Что не так и что я могу сделать?

...