OpenCV中的三角形填充

12

在OpenCV中,我们有矩形、圆和椭圆的填充方法,但是有没有人能够说一下如何使用OpenCV和Python在图像中填充三角形呢?


你尝试过什么了吗?我的第一个想法是从一个正方形开始,然后从那里开始工作。例如,可以给出一个正方形,然后将第二个正方形旋转到另一个正方形的顶部以制作直角三角形,或者您可以放置两个旋转的三角形以在三角形中形成不同的角度。 - user10171440
1
我们还拥有cv2.fillpoly()的功能,可以用于绘制任何多边形。 - ZdaR
2个回答

23

在OpenCV中,填充三角形最简单的方法是使用绘制轮廓函数。假设我们知道三角形的三个点为“pt1”,“pt2”和“pt3”:

import cv2
import numpy as np

image = np.ones((300, 300, 3), np.uint8) * 255

pt1 = (150, 100)
pt2 = (100, 200)
pt3 = (200, 200)

cv2.circle(image, pt1, 2, (0,0,255), -1)
cv2.circle(image, pt2, 2, (0,0,255), -1)
cv2.circle(image, pt3, 2, (0,0,255), -1)

我们可以将这三个点放入一个数组中,然后作为轮廓绘制:

triangle_cnt = np.array( [pt1, pt2, pt3] )

cv2.drawContours(image, [triangle_cnt], 0, (0,255,0), -1)

cv2.imshow("image", image)
cv2.waitKey()

这是输出图像。干杯。三角形填充


13

你可以像 @ZdaR 建议的那样绘制多边形并填充它。

# draw a triangle
vertices = np.array([[480, 400], [250, 650], [600, 650]], np.int32)
pts = vertices.reshape((-1, 1, 2))
cv2.polylines(img_rgb, [pts], isClosed=True, color=(0, 0, 255), thickness=20)

# fill it
cv2.fillPoly(img_rgb, [pts], color=(0, 0, 255))
# show it
plt.imshow(img_rgb)

有没有想法可以绘制不透明/半透明的三角形?谢谢! - BGG16
@GbG 我认为你可以在fillPoly方法上实现它。不太确定是否可以使用RGBA作为颜色,但这可能是一个好的开始方式。 - mirkancal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接