Je veux dessiner / peindre sur un écran webcam à l'aide de OPENCV. Depuis que je lis à partir d'une caméra, les cadres changent constamment, alors j'essaie de comprendre un moyen de conserver ou d'enregistrer le dessin sur le cadre actuel et de l'utiliser pour la trame suivante. Le code ci-dessous vous permet de dessiner sur l'écran mais lorsqu'il obtient le cadre suivant, le dessin est parti et il recommence.
Quelqu'un pourrait-il m'aider s'il vous plaît ... merci. P>
CvCapture *input; input = cvCaptureFromCAM( 0 ); cvSetMouseCallback("Demo",&on_mouse, 0); for(;;) { frame = cvQueryFrame(input); if(!image) { image = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3); screenBuffer = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3); } cvCopy(frame, image, 0); if(drawing) //drawing is a global variable { cvCircle(image, cvPoint(last_x,last_y), 10,CV_RGB(red,green,blue), -1, CV_AA, 0); cvCopy(image, screenBuffer, 0); } cvShowImage( "Demo", screenBuffer ); } void on_mouse( int event, int x, int y, int flags, void* param ) { last_x = x; last_y = y; if(event==CV_EVENT_LBUTTONDOWN) { drawing = 1; } }
3 Réponses :
dessiner dans une image séparée puis CVADD () que vers l'image vidéo immédiatement avant de le renvoyer p>
Vous aurez généralement des problèmes d'ajout d'images (ils seront éventuellement saturer), alors je suppose que c'est pourquoi vous recommencez. Je vois que vous avez des images couleur ... Si vous utilisez des trucs plus puissants comme OpenGL pour votre dessin, vous pouvez utiliser la superposition pour vos dessins. Sinon vérifier cela: p>
http://aishack.in/Tutorials/transparent-image-overlays -In-OpenCV / P>
Je ne vais pas entrer dans tous les détails pourquoi votre approche est mauvaise, mais gardez à l'esprit que la création de 2 images supplémentaires pour le dessin est un peu trop trop importante.
Il est important que vous réalisiez que tout cela kinky Stuff em> est fait sur le même fil utilisé pour capturer de nouveaux cadres. Cela signifie quoi exactement? Cela signifie que OK, alors vous em> vraiment em> veux dessiner sur la fenêtre qui affiche les cadres capturés. Eh bien, la chose évidente la seule chose qui sera sur le dessin_frame em> sont les cercles qui apparaîtront lorsque la souris se déplace sur la fenêtre, Lorsque le LBUTTON de la souris est cliqué (un 2e cliquez sur commutateurs entre ON / OFF). P> Après le dessin du cercle, Le dessin_frame em> est superposé sur le dessus sur le cadre capturé par la caméra forte>. Ce processus est un peu cher sur la CPU et que nous le faisons dans le fil principal de l'application, cela diminuera également le framerate. P> Je suggère fortement que tout le monde intéressé par ajout / Fusion / superposition EM> Cadres transparents avec OpenCV Jetez un coup d'œil à superpositions d'images transparentes Dans OpenCV . P> cvcapturefromcam (-1) code> car je suis sur Linux. Vous devriez probablement changer cela à tout ce qui fonctionne pour vous. Selon votre message, c'est
cvcapturefromcam (0) code>. p>
@Aziz Veuillez consulter les réponses et acceptez celui qui a résolu votre problème.
liée à mes intérêts. Pouvez-vous s'il vous plaît poster dans un commentaire ici quelle documentation / tutoriels que vous utilisiez? J'aimerais avoir un début pour moi-même dans OpenCV. Merci
Il est important pour nous que vous examiniez les questions et acceptez la réponse qui résout votre problème.