Python OpenCV Box2D
Question: I am trying to call OpenCV function MinAreaRect2 from within python. I use
OpenCV 2.4.2 with python 2.7 and numpy 1.6. I went this far :

    
    
    import cv
    
    def nda2ipl(arr, dtype=None):
        return cv.fromarray(np.ascontiguousarray(arr, dtype=dtype))
    
    def min_area_rect2(points):
        storage = cv.CreateMemStorage()
        cv_points = nda2ipl(points.reshape((-1, 1, 2)))
        out = cv.MinAreaRect2(cv_points, storage)
    return out
    

I can call this function with a ndarray of shape (N x 2). I get this kind of
results :

    
    
    ((476.5, 604.5), (951.0, 1207.0), -0.0)
    

I assume that the first tuple is the center of the box, the second gives the
width and the height and the last is the angle.

The problem is I could not get a clear reference stating this. Actually, the
opencv documentation tells me what the functions returns in Python.

I found the [official documentation about this
function](http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=minarearect#cv.MinAreaRect2)
but this is not very helpful.

What are exactly the output of MinAreaRect2 in python ? More generally, where
do you get precise documentation about the OpenCV python wrapper ?


Answer: OpenCV Python wrapper documentation is kept along with the normal
documentation in same site, www.docs.opencv.org

Earlier Python module used was `cv` interface, which used native data types
from original C++ interface like cvMat, cvSeq etc.

Later it was shifted to more better, advanced and simpler module `cv2`
interface. In it, everything is returned as either Numpy arrays or native
python data types.

Here, tuple returned has the same arguments as that of
**[cvBox2D](http://docs.opencv.org/modules/core/doc/old_basic_structures.html?highlight=box2d#cvbox2d)**.
You can find more details the differences between different python wrappers
here : [What is different between all these OpenCV Python
interfaces?](http://stackoverflow.com/questions/10417108/what-is-different-
between-all-these-opencv-python-interfaces/10425504#10425504)

Here, your assumption is correct. Those values specified exactly what you
mentioned.

If you want to draw rotated rect, you need 4 vertices of the rectangle. For
that, you need a function which is never seen in documentation, ie
**cv2.cv.BoxPoints()** (but don't worry, it will be there in documentation
when OpenCV 2.4.3 is released. )

You can find an example on how to draw rotated rectangle in this article :
[**Rotated
Rectangle**](http://opencvpython.blogspot.in/2012/06/contours-2-brotherhood.html)

![enter image description here](http://i.stack.imgur.com/1clLH.png)

