2014-04-27 4 views
1

Привет Я пытаюсь нарисовать вращающийся прямоугольник из minAreaRect, но я нахожу только код в python.opencv как рисовать minAreaRect в java

rect = cv2.minAreaRect(cnt) 
box = cv2.cv.BoxPoints(rect) 
box = np.int0(box) 
cv2.drawContours(im,[box],0,(0,0,255),2) 

Как нарисовать его в java?

ответ

0

Что-то вроде этого:

MatOfPoint2f points = new MatOfPoint2f(new Point(1, 1), new Point(5, 1), new Point(4, 3), new Point(6, 2)); 
RotatedRect rrect = Imgproc.minAreaRect(points); 
+2

Спасибо за ваш ответ, но я хочу нарисовать контур результата из minAreaRect – kosbou

2

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

К сожалению, версия OpenCV, которую я использую на Android, не имеет метода rectangle, который поддерживает RotatedRect как paramenter. Поэтому мне пришлось импровизировать.

Point points[] = new Point[4]; 
    rect.points(points); 
    for(int i=0; i<4; ++i){ 
     Core.line(init, points[i], points[(i+1)%4], new Scalar(255,255,255)); 
    } 
1

Обращаю повернутый прямоугольник из minAreaRect, используя такой код:

rRect = Imgproc.minAreaRect(mop2f); 

     Point[] vertices = new Point[4]; 
     rRect.points(vertices); 
     for (int j = 0; j < 4; j++){ 
      Imgproc.line(mat, vertices[j], vertices[(j+1)%4], new Scalar(0,255,0)); 
     } 
1

Вы можете использовать drawContours так:

Point[] vertices = new Point[4]; 
rotatedRect.points(vertices); 
List<MatOfPoint> boxContours = new ArrayList<>(); 
boxContours.add(new MatOfPoint(vertices)); 
Imgproc.drawContours(out, boxContours, 0, new Scalar(128, 128, 128), -1); 

С помощью этого метода можно нарисовать контур и заполнить его сплошным цветом (что вы не можете сделать, если используете Imgproc.line).

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