opencv enregistrement d'image capturée à partir d'une webcam
quelques jours, je suis dépenses sur elle,
je receeive une erreur sigabrt d'erreur lorsque les codes tryng pour enregistrer l'image sur le hd, somewone a des solutions ou des idées?
je travaille avec un macbook pro mountain lion sur le dernier XCODE et les bibliothèques sont wll configurés.
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
using namespace cv;
//A Simple Camera Capture Framework
int main() {
CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if ( !capture ) {
fprintf( stderr, "ERROR: capture is NULL \n" );
getchar();
return -1;
}
//Create a window in which the captured images will be presented
cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );
//Show the image captured from the camera in the window and repeat
while ( 1 ) {
//Get one frame
IplImage* frame = cvQueryFrame( capture );
if ( !frame ) {
fprintf( stderr, "ERROR: frame is null...\n" );
getchar();
break;
}
cvShowImage( "mywindow", frame );
//Do not release the frame!
if ( (cvWaitKey(10) & 255) == 's' ) {
CvSize size = cvGetSize(frame);
IplImage* img= cvCreateImage(size, IPL_DEPTH_16S, 1);
img = frame;
cvSaveImage("matteo.jpg",&img);
}
if ( (cvWaitKey(10) & 255) == 27 ) break;
}
//Release the capture device housekeeping
cvReleaseCapture( &capture );
cvDestroyWindow( "mywindow" );
return 0;
}
Votre
IplImage* img= cvCreateImage(size, IPL_DEPTH_16S, 1);
est inutile car vous d'écraser le pointeur de votre nouveau IplImage
sur la ligne suivante.OriginalL'auteur Matteo Ottaviani | 2013-06-07
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous mélangez votre pointeur de la syntaxe. Vous êtes à la création d'un nouveau
IplImage
avecIplImage* img= cvCreateImage(size, IPL_DEPTH_16S, 1);
mais sur la ligne suivante, vous perdez cette structure comme vous d'écraser le pointeurimg
avecframe
.Le code à l'origine de votre sigabrt est où vous envoyez un pointeur vers un pointeur dans
cvSaveImage("matteo.jpg",&img);
. Vous ne devriez pas faire&img
commeimg
est déjà un pointeur. La suivante est correcte:Il n'y a effectivement aucune raison pour vous de créer un nouveau
IplImage
, sauf si vous voulez faire un peu de prétraitement avant de les enregistrer dans un fichier.J'ai modifié votre
if
-clause suivante qui fonctionne très bien sur mon ordinateur:OriginalL'auteur PureW
J'ai passé plusieurs jours à chercher sur internet la bonne solution avec une simple entrée au clavier. Il était toujours à la jambe de retard /tout en utilisant cv::waitKey.
La solution que j'ai trouvé est de l'ajout de Sommeil(5) juste après la capture de l'image de la webcam.
L'exemple ci-dessous est une combinaison de différentes discussions sur le forum.
Elle fonctionne sans jambe /retard. Système d'exploitation Windows.
Appuyez sur "q" pour capturer et enregistrer l'image.
Il y a une webcam nourrir toujours présent. Vous pouvez modifier la séquence pour afficher l'image capturée /image.
Ce Qui Concerne, Andrej
Salutations,
J'ai passé plusieurs jours à chercher sur internet la bonne solution avec une simple entrée au clavier. Il était toujours à la jambe de retard /tout en utilisant cv::waitKey.
La solution que j'ai trouvé est de l'ajout de Sommeil(5) juste après la capture de l'image de la webcam.
L'exemple ci-dessous est une combinaison de différentes discussions sur le forum.
Elle fonctionne sans jambe /retard. Système d'exploitation Windows.
Appuyez sur "q" pour capturer et enregistrer l'image.
Il y a une webcam nourrir toujours présent. Vous pouvez modifier la séquence pour afficher l'image capturée /image.
PS "tipka" - signifie "clé" sur le clavier.
Ce Qui Concerne, Andrej
OriginalL'auteur Andrej