簡體   English   中英

OpenCV:如何在圖像上繪制圓形輪廓

[英]Opencv: How to draw a circle contour on an image

我已經編寫了一個python函數,該函數應該在圖像上繪制一個圓,該圓的中心點已使用鼠標回調來定義:

def draw_circle_contour(frame, pt, radius):
    cv2.circle(frame, center=pt, radius=3, color=(255,0,0), thickness=-1)
    discretized_circle_contour_x = [pt[0] + radius*np.cos(theta) for theta in np.linspace(0, 36, 36)]
    discretized_circle_contour_x = map(int, discretized_circle_contour_x)
    discretized_circle_contour_y = [pt[1] + radius*np.sin(theta) for theta in np.linspace(0, 36, 36)]
    discretized_circle_contour_y = map(int, discretized_circle_contour_y)
    discretized_circle_contour = zip(discretized_circle_contour_x, discretized_circle_contour_y)
    for el in discretized_circle_contour:
        cv2.circle(frame, center=el, radius=2, color=(255,0,0), thickness=-1)

現在,當我將theta指定在np.linspace(0,360,360)內時,這將非常np.linspace(0,360,360) 但是,我現在只想繪制一個圓的1/10。 即我想繪制一個圓形輪廓,其中被遮蓋的角度為36°。 我認為這段代碼應該可以工作,但是由於某種原因,運行它時,結果看起來像這樣:

myCircle

這里發生了什么? 誰能告訴?

正如您所指出的:除了繪制小圓圈/點外,我還可以使用cv2.polylines繪制一個圓弧段。 這僅需要將最后兩行替換為:

for el in discretized_circle_contour:
        help.append(list(el))
    cv2.polylines(frame, [np.asarray(help)], isClosed=False, color=(255,0,0), thickness=1) 

但是,我仍然面臨該段被多次繪制的問題,而我希望在[0,36]度之間僅繪制一次!

……我才發現原因:角度theta需要以弧度而不是度為單位。 Whops。

最終結果如下所示: 折線

發生的情況是,您在discretized_circle_contour中的每個點上繪制了一個半徑為2的填充圓(看起來像一個點,因為半徑很小)。

如果我正確理解了您的問題,那么您真正想要的只是一個跨過半徑1/10的弧形。 您已經有了[0,36]度的拱門點,只需將其繪制為折線即可:

cv2.polylines(frame, [discretized_circle_contour], False, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM