Dessin de rectangle sur l'image opencv?

J'ai chargé une image à l'aide d'opencv bibliothèques python et maintenant je veux dessiner un rectangle à l'aide de la souris, mais tout de tracer le rectangle le rectangle doit être visible pour que la personne le dessin, il peut le placer de façon à ce que l'objet d'intérêt est complètement dans le rectangle mais mon code est de produire le résultat désiré

mon code est

import os
import sys
import numpy as np
import cv2
baseDir = '/home/aman/Downloads/shirt/'
filenames = next(os.walk(baseDir))[2]
drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1
tx,ty = -1,-1
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing,mode
print 'aman'
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
if mode == True:
#cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
cv2.line(img, (ix,iy),(ix,y), 255, 1, 8, 0)
cv2.line(img, (ix,iy),(x,iy), 255, 1, 8, 0)
cv2.line(img, (ix,y),(x,y), 255, 1, 8, 0)
cv2.line(img, (x,iy),(x,y), 255, 1, 8, 0)
else:
cv2.circle(img,(x,y),5,(0,0,255),-1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
if mode == True:
#cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
cv2.rectangle(img,(ix,y),(x,y),(0,255,0),-1)
cv2.rectangle(img,(x,iy),(x,y),(0,255,0),-1)
else:
cv2.circle(img,(x,y),5,(0,0,255),-1)
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(1):
cv2.imshow('image',img)
k = cv2.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break
cv2.destroyAllWindows()        

`

mais la sortie produite est quelque chose comme
Dessin de rectangle sur l'image opencv?

Je ne veux pas ce genre de comportement, je veux juste un simple rectangle et pas pour chaque mouvement. Je sais que je devrais modifier le code de la souris déplacer l'événement, mais le problème est comment faire pour que quand la personne est le déplacement de la souris il est capable de voir le rectangle complet et quand il relâche le bouton du rectangle doit être fixé ?

OpenCv trace la ligne directement dans vos données d'image. Soit la copie et de restauration pour chaque nouveau rectangle ou utiliser un Toolkit graphique.
Je ne sais vraiment pas comment le faire en Python (d'où le commentaire), mais l'idée est de dessiner chaque intermédiaire rectangle en faisant XOR entre la couleur de la ligne et de la couleur de l'image à chaque pixel. Puis, avant de dessiner le prochain rectangle, XOR à nouveau avec la couleur de la ligne pour annuler la dernière rectangle. En C++, vous auriez du le faire avec LineIterator. Seulement sur le dernier rectangle ne vous en tirer normalement dans la couleur finale.

OriginalL'auteur iec2011007 | 2015-03-24