- Trending Categories
- Data Structure
- Operating System
- MS Excel
- C Programming
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Draw a triangle with centroid using OpenCV
The centroid is also called the geometric center; it is defined as the center point of the object. Whereas the centroid of a triangle is defined as the point of intersection of all three medians of a triangle.
Calculating the Centroid of a triangle:
Let’s consider an ABC triangle, the three vertices of the triangle are A(x1, y1), B(x2, y2), and C(x3, y3). Then the centroid of a triangle can be calculated by taking the average of the x and y coordinates of all three vertices.
centroid of a triangle = ((x1+x2+x3)/3 , (y1+y2+y3)/3 )
In this article, we will see the python programs to draw a triangle with a centroid using the OpenCV library.
Using pre-defined coordinates
In this approach, the triangle will be drawn using the predefined coordinates. Here we will use the drawContours() method to join the coordinate points.
The drawContours() method is used to join the boundary points to make any type of shape. Following is the syntax of this function –
drawContours(img, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]])
img: Destination image.
contours: All the input contours. Which should be passed as a Python list.
contourIdx: specifies the index of contours (it is useful when individual contours are drawn). If it is -1, all the contours are drawn.
And remaining parameters are color, thickness, lineType, etc.
In this example, the triangle will be drawn by using the predefined coordinates.
import cv2 import numpy as np image = np.ones((300, 300, 3), np.uint8) * 255 pt1 = (150, 100) pt2 = (100, 200) pt3 = (200, 200) triangle_cnt = np.array([pt1, pt2, pt3]) cv2.drawContours(image, [triangle_cnt], 0, (0,255,0), -1) # finding centroid centroid = ((pt1+pt2+pt3)//3, (pt1+pt2+pt3)//3) cv2.circle(image, centroid, 2, (0, 0, 255), 2) cv2.imshow("image", image) cv2.waitKey(0)
Using Mouse Drag
To draw the triangle with a centroid here we will use the setMouseCallback(), cv.line(), and cv2.circle() functions along with the cv2.EVENT_LBUTTONDOWN mouse event type.
The setMouseCallback() function: It is used to specify which function has to be called for a specific window. In other words, the function creates a mouse event handler for the specified window.
cv2.line(): Draws a line between two connecting points pt1 and pt2 in the image.
cv2.circle(): Draws a circle with a given center and radius.
cv2.EVENT_LBUTTONDOWN: It indicates the left mouse button is pressed.
Initially, the mouse callback function is set to a window using the namedWindow() method to read the triangle coordinates where the user draws. And by using the mouse click event we will identify the x and y coordinates and then the triangle will be drawn using the cv2.line() function. Finally, the centroid will be calculated using the basic formula, it will draw by using the cv2.circle() function.
import numpy as np import cv2 as cv ix,iy,sx,sy = -1,-1,-1,-1 x_points =  y_points =  # mouse callback function def draw_lines(event, x, y, flags, param): global ix,iy,sx,sy # if the left mouse button was clicked, record the starting if event == cv.EVENT_LBUTTONDOWN: # draw circlar points of 2px cv.circle(img, (x, y), 3, (0, 0, 127), -1) if ix != -1: cv.line(img, (ix, iy), (x, y), (0, 0, 127), 2, cv.LINE_AA) x_points.append(x) y_points.append(y) else: sx, sy = x, y ix,iy = x, y if len(x_points) == 3: centroid = (sum(x_points)//3, sum(y_points)//3) cv2.circle(img, centroid, 2, (0, 0, 255), 2) return None # read image img = cv.resize(cv.imread("Images/Blank_img.png"), (1280, 720)) cv.namedWindow('image') cv.setMouseCallback('image',draw_lines) while(1): cv.imshow('image',img) if cv.waitKey(20) & 0xFF == ord('q'): break cv.destroyAllWindows()
In this article we have seen the two different ways to draw triangle with a centroid using the OpenCV library in python.
Kickstart Your Career
Get certified by completing the courseGet Started