我使用以下代码在脸上画圆圈。
for (x, y, w, h) in faces:
cv2.circle(img, ( int((x + x + w )/2), int((y + y + h)/2 )), int (h / 2), (0, 255, 0), 5)
然而,绘制圆的厚度完全是绿色。有没有办法让圆圈的百分之几(比方说30%)变成粉红色?
答案 0 :(得分:6)
正如我在评论中建议的那样,您可以使用cv2.ellipse()
分别绘制两个弧。例如:
import numpy as np
import cv2
img = np.ones((400,400,3), np.uint8) * 255
# See:
# http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#cv2.ellipse
# http://docs.opencv.org/3.1.0/dc/da5/tutorial_py_drawing_functions.html
circ_center = (200,200)
circ_radius = 150
circ_thick = 12
circ_axes = (circ_radius,circ_radius)
# cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])
cv2.ellipse(img, circ_center, circ_axes, 0, 0, 90, (255,0,0), circ_thick, cv2.LINE_AA)
cv2.ellipse(img, circ_center, circ_axes, 0, 90, 360, (0,255,0), circ_thick, cv2.LINE_AA)
cv2.imshow("Image", img)
cv2.imwrite("circ1.png", img)
cv2.waitKey()
产地:
现在,弧线具有圆形边缘。这对您来说可能是也可能不是问题。我不确定在OpenCV中是否有更好的方法,但是我用平边创建粗线的一种方法是用许多细线构建粗线。
例如:
import numpy as np
import cv2
img = np.ones((400,400,3), np.uint8) * 255
# See:
# http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#cv2.ellipse
# http://docs.opencv.org/3.1.0/dc/da5/tutorial_py_drawing_functions.html
circ_center = (200,200)
circ_radius = 150
circ_thick = 12
def draw_arc(img, center, rad, angle, startAngle, endAngle, color, thickness, lineType, thick=1):
for r in range(rad,rad+thickness):
cv2.ellipse(img, center, (r,r), angle, startAngle, endAngle, color, thick, lineType)
draw_arc(img, circ_center, circ_radius, 0, 0, 90, (255,0,0), circ_thick, cv2.LINE_AA)
draw_arc(img, circ_center, circ_radius, 0, 90, 360, (0,255,0), circ_thick, cv2.LINE_AA)
cv2.imshow("Image", img)
cv2.imwrite("circ2.png", img)
cv2.waitKey()
产地:
您可以通过调整startAngle
和endAngle
参数来调整着色的起点和终点。您可能需要在其中调整一些其他参数,但这应该让您了解一种方法。
你也可以画一个完整的圆圈,并在它上面加一个弧,对应你想要的颜色不同,最后可能会更容易。