2016-05-25 211 views
2

繪圖時如何解決連續線這是我的代碼:與蟒蛇

import numpy as np 
import cv2 
drawing = False 

def draw_circle(event,x,y,flags,param): 
    global ix,iy,drawing 

    if event == cv2.EVENT_LBUTTONDOWN: 
    drawing= True 
    ix,iy=x,y 
    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON: 
    if drawing == True: 
     cv2.circle(img,(x,y),3,(0,0,0),-1) 
    elif event == cv2.EVENT_LBUTTONUP: 
    drawing == False 

img=np.ones((512,512,3),np.uint8)*255 
cv2.namedWindow('image') 
cv2.setMouseCallback('image',draw_circle) 

while(True): 
    cv2.imshow('image',img) 

    if cv2.waitKey(1)&0xff == ord('q'): 
    break 

cv2.destroyAllWindows() 

第一線慢慢畫,第二屆一個繪製快:

the first line was drawn slowly, the 2nd one was drawn fast

我的問題是:

  1. 這是什麼原因導致此問題?
  2. 如何解決它。
+0

爲什麼你會期望沒有任何差距?你正在一系列離散點上繪製一個圓圈。你需要編寫一些代碼來「加入點」 - 從最後一點到當前點畫一條線。 – SiHa

+0

我知道即時繪製一系列離散點,但由於程序和結果,它似乎像每個刻度繪製一個圓圈。只要畫一個圓的速度比鼠標的移動速度快,它應該是連續的,因爲在我看來每個圓應該有重疊的部分。 – wypxhh123

+0

而這正是發生的事情。當你慢慢地畫線時,它們會重疊,速度很快,而且不會。你應該更徹底地調查下面的阿卜杜爾的答案。這幾乎就是我要發佈的內容。 – SiHa

回答

1

請勿使用circle,當您使用circle時,在快速移動時會出現間隙。由於在快速移動之前繪製前一個圓圈之前引發了新的鼠標事件,因此會出現間隙。使用line代替如下:

def draw_circle(event,x,y,flags,param): 
global ix,iy,drawing 

if event == cv2.EVENT_LBUTTONDOWN: 
    drawing= True 
    ix,iy=x,y 
elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON: 
    if drawing: 
    cv2.line(img,(ix,iy),(x,y),(0,0,0), 3) 
    ix,iy = x,y 
elif event == cv2.EVENT_LBUTTONUP: 
    drawing == False 
+0

@Selcuk修正了它! –

+0

感謝您的回覆。但我發現還有差距。我仍然不明白爲什麼有差距。根據該計劃,沒有理由斷斷續續。 – wypxhh123

+1

當我使用上述方法時,沒有差距。你能展示你的結果嗎? –