2010-08-25 17 views
3

Je travaille sur un programme utilisant la librairie OpenCV (même si je ne suis pas un expert). Une des choses que je dois faire est de dessiner sur l'image. J'ai regardé les fonctions de dessin OpenCV et elles semblent toutes assez simples (Circle, Line, etc), mais le programme ne compilera pas! Il dit ceci pour être exact: erreur C3861: 'Line': identifiant non trouvé. Y at-il quelque chose que je n'ai pas installé? J'ai utilisé le tutoriel sur http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2008 pour installer OpenCV sur Visual Studio 2008 et jusqu'à présent, c'est le seul vrai problème que j'ai. S'il vous plaît aidez-moi! J'ai besoin que ce programme fonctionne le plus tôt possible!OpenCV: Dessiner sur une image

Répondre

4

La fonction permettant de dessiner une ligne dans l'API OpenCV C est nommée cvLine, et non Line.

+0

Ok ... C'était facile. Rien n'a été dit sur le site -_- http://opencv.willowgarage.com/documentation/python/drawing_functions.html Merci beaucoup! – Juls

+0

@Juls Le lien que vous avez posté est pour la documentation Python, ce qui explique pourquoi les noms des fonctions sont différents. –

+1

+1 Précis. Juls, n'oubliez pas de voter sur sa réponse ou de l'accepter comme solution officielle. – karlphillip

1

Je pense que vous avez été victime de l'erreur commune suivante: C comprend sont en #include <opencv/core.h> etc, alors que C++ inclut sont:

#include <opencv2/core/core.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <oppencv2/highgui/highgui.hpp> 

Inclure ces pour le dessin et montrant l'image. Utilisez using namespace cv; puis vous ne devez pas écrire cv::line juste line et tout ira bien.
J'ai dû me battre avec le même problème quand j'ai commencé. ;)

(Et utiliser BTW cv::Mat pour C++)

0

Vous pouvez maintenant facilement peindre sur les images OpenCV.. Pour cela, vous devez appeler la fonction setMouseCallback(‘window_name’,image_name) sur opencv. Après cela, vous pouvez facilement gérer la fonction de rappel de la souris sur vos images. Ensuite, vous devez détecter les événements cv2.EVENT_LBUTTONDOWN, cv2.EVENT_MOUSEMOVE and cv2.EVENT_LBUTTONUP. En vérifiant l'état booléen approprié, vous devez décider comment vous voulez interagir avec les images OpenCV.

def paint_draw(event,former_x,former_y,flags,param): 
    global current_former_x,current_former_y,drawing, mode 

    if event==cv2.EVENT_LBUTTONDOWN: 
     drawing=True 
     current_former_x,current_former_y=former_x,former_y 

    elif event==cv2.EVENT_MOUSEMOVE: 
     if drawing==True: 
      if mode==True: 
       cv2.line(image,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5) 
       current_former_x = former_x 
       current_former_y = former_y 
    elif event==cv2.EVENT_LBUTTONUP: 
     drawing=False 
     if mode==True: 
      cv2.line(image,(current_former_x,current_former_y),(former_x,former_y),(0,0,255),5) 
      current_former_x = former_x 
      current_former_y = former_y 
    return former_x,former_y 

Pour plus de détails, vous pouvez voir le lien: How to Paint on OpenCV Images and Save the Image

Sortie:

enter image description here

Questions connexes