Я успешно обнаружил объект, использующий 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);
Но без изменений в результатах.
Что не так и что я могу сделать?