2014-04-27 206 views
1

嗨我想从minAreaRect绘制旋转的矩形,但我发现只有python中的代码。opencv如何在java中绘制minAreaRect

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

我知道这个问题是旧的,但最近我有同样的问题,所以我决定在这里发表了答案。

不幸的是,我在Android上使用的OpenCV版本没有支持RotatedRect作为参数的方法rectangle。所以我不得不即兴创作。

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

我用这样的代码绘制旋转RECT从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,则不能执行此操作)。