2015-02-05 5 views
1

OpenCV 문서에서 가져온 간단한 프로그램을 수정했습니다.OpenCV : 마우스로 연속적으로 그리는 방법?

단순히 마우스 포인터를 계속 사용하여 그립니다. 잠시 동안 마우스 커서를 너무 천천히 움직이지 않으면 연속적인 방식으로 그리지는 못했습니다.

코드 :

import cv2 
import numpy as np 

drawing=False # true if mouse is pressed 
mode=True # if True, draw rectangle. Press 'm' to toggle to curve 

# mouse callback function 
def interactive_drawing(event,x,y,flags,param): 
    global ix,iy,drawing, mode 

    if event==cv2.EVENT_LBUTTONDOWN: 
     drawing=True 
     ix,iy=x,y 

    elif event==cv2.EVENT_MOUSEMOVE: 
     if drawing==True: 
      if mode==True: 
       cv2.circle(img,(x,y),1,(0,0,255),-1) 
    elif event==cv2.EVENT_LBUTTONUP: 
     drawing=False 
     if mode==True: 
      cv2.circle(img,(x,y),1,(0,0,255),-1)   


img = np.zeros((512,512,3), np.uint8) 
cv2.namedWindow('Window') 
cv2.setMouseCallback('Window',interactive_drawing) 
while(1): 
    cv2.imshow('Window',img) 
    k=cv2.waitKey(1)&0xFF 
    if k==27: 
     break 
cv2.destroyAllWindows() 

는 희망이 스크린 샷은 내 문제를 설명합니다 : 나는 너무 느리게 마우스 커서를 이동했기 때문에 작은 선이 연속 보인다.

enter image description here

내가 이런 식으로 계속 그릴 수 있기를 기대 : 나는 정상적인 속도로 커서를 이동했기 때문에 더 이상 라인은 연속적이지

enter image description here

어느 하나 이 문제를 해결하는 방법을 보여줄 수 있습니까? 미리 감사드립니다.

답변

2

콜백 함수를 호출 할 때마다 하나의 원을 그리는 대신 마지막 점에서 현재 점까지 선을 그려보십시오.
따라서 마지막 점을 전역 변수에 저장해야합니다.

1

OpenCV는 이미 파이썬의 예제에서 이와 같은 기능을 구현합니다. Sketcher이라고합니다.

inpainting에 사용하는 방법을 보여주는 좋은 예가 있습니다.