GSoC Python Tutorials
GSoC Python Tutorials removed white spaces removed blank lines at EOF removed duplicate labels
This commit is contained in:
BIN
doc/py_tutorials/py_gui/py_drawing_functions/images/drawing.jpg
Normal file
BIN
doc/py_tutorials/py_gui/py_drawing_functions/images/drawing.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,106 @@
|
||||
.. _Drawing_Functions:
|
||||
|
||||
Drawing Functions in OpenCV
|
||||
******************************
|
||||
|
||||
Goal
|
||||
=====
|
||||
|
||||
.. container:: enumeratevisibleitemswithsquare
|
||||
|
||||
* Learn to draw different geometric shapes with OpenCV
|
||||
* You will learn these functions : **cv2.line()**, **cv2.circle()** , **cv2.rectangle()**, **cv2.ellipse()**, **cv2.putText()** etc.
|
||||
|
||||
Code
|
||||
=====
|
||||
|
||||
In all the above functions, you will see some common arguments as given below:
|
||||
|
||||
* img : The image where you want to draw the shapes
|
||||
* color : Color of the shape. for BGR, pass it as a tuple, eg: ``(255,0,0)`` for blue. For grayscale, just pass the scalar value.
|
||||
* thickness : Thickness of the line or circle etc. If **-1** is passed for closed figures like circles, it will fill the shape. *default thickness = 1*
|
||||
* lineType : Type of line, whether 8-connected, anti-aliased line etc. *By default, it is 8-connected.* ``cv2.LINE_AA`` gives anti-aliased line which looks great for curves.
|
||||
|
||||
Drawing Line
|
||||
-------------
|
||||
To draw a line, you need to pass starting and ending coordinates of line. We will create a black image and draw a blue line on it from top-left to bottom-right corners.
|
||||
::
|
||||
|
||||
import numpy as np
|
||||
import cv2
|
||||
|
||||
# Create a black image
|
||||
img = np.zeros((512,512,3), np.uint8)
|
||||
|
||||
# Draw a diagonal blue line with thickness of 5 px
|
||||
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
|
||||
|
||||
Drawing Rectangle
|
||||
-------------------
|
||||
To draw a rectangle, you need top-left corner and bottom-right corner of rectangle. This time we will draw a green rectangle at the top-right corner of image.
|
||||
::
|
||||
|
||||
img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
|
||||
|
||||
Drawing Circle
|
||||
----------------
|
||||
To draw a circle, you need its center coordinates and radius. We will draw a circle inside the rectangle drawn above.
|
||||
::
|
||||
|
||||
img = cv2.circle(img,(447,63), 63, (0,0,255), -1)
|
||||
|
||||
Drawing Ellipse
|
||||
--------------------
|
||||
|
||||
To draw the ellipse, we need to pass several arguments. One argument is the center location (x,y). Next argument is axes lengths (major axis length, minor axis length). ``angle`` is the angle of rotation of ellipse in anti-clockwise direction. ``startAngle`` and ``endAngle`` denotes the starting and ending of ellipse arc measured in clockwise direction from major axis. i.e. giving values 0 and 360 gives the full ellipse. For more details, check the documentation of **cv2.ellipse()**. Below example draws a half ellipse at the center of the image.
|
||||
::
|
||||
|
||||
img = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
|
||||
|
||||
|
||||
Drawing Polygon
|
||||
------------------
|
||||
To draw a polygon, first you need coordinates of vertices. Make those points into an array of shape ``ROWSx1x2`` where ROWS are number of vertices and it should be of type ``int32``. Here we draw a small polygon of with four vertices in yellow color.
|
||||
::
|
||||
|
||||
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
|
||||
pts = pts.reshape((-1,1,2))
|
||||
img = cv2.polylines(img,[pts],True,(0,255,255))
|
||||
|
||||
.. Note:: If third argument is ``False``, you will get a polylines joining all the points, not a closed shape.
|
||||
|
||||
.. Note:: ``cv2.polylines()`` can be used to draw multiple lines. Just create a list of all the lines you want to draw and pass it to the function. All lines will be drawn individually. It is more better and faster way to draw a group of lines than calling ``cv2.line()`` for each line.
|
||||
|
||||
Adding Text to Images:
|
||||
------------------------
|
||||
To put texts in images, you need specify following things.
|
||||
* Text data that you want to write
|
||||
* Position coordinates of where you want put it (i.e. bottom-left corner where data starts).
|
||||
* Font type (Check **cv2.putText()** docs for supported fonts)
|
||||
* Font Scale (specifies the size of font)
|
||||
* regular things like color, thickness, lineType etc. For better look, ``lineType = cv2.LINE_AA`` is recommended.
|
||||
|
||||
We will write **OpenCV** on our image in white color.
|
||||
::
|
||||
|
||||
font = cv2.FONT_HERSHEY_SIMPLEX
|
||||
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
|
||||
|
||||
Result
|
||||
----------
|
||||
So it is time to see the final result of our drawing. As you studied in previous articles, display the image to see it.
|
||||
|
||||
.. image:: images/drawing.jpg
|
||||
:alt: Drawing Functions in OpenCV
|
||||
:align: center
|
||||
|
||||
|
||||
Additional Resources
|
||||
========================
|
||||
|
||||
1. The angles used in ellipse function is not our circular angles. For more details, visit `this discussion <http://answers.opencv.org/question/14541/angles-in-ellipse-function/>`_.
|
||||
|
||||
|
||||
Exercises
|
||||
==============
|
||||
#. Try to create the logo of OpenCV using drawing functions available in OpenCV
|
Reference in New Issue
Block a user