Bonjour à tous,
J'effectue un traitement sur un flux video et l'image recupérée après le traitement est retournée (tête en bas). Quelqu'un sait d'où pourrait venir ce problème ?
D'avance merci
Bonjour à tous,
J'effectue un traitement sur un flux video et l'image recupérée après le traitement est retournée (tête en bas). Quelqu'un sait d'où pourrait venir ce problème ?
D'avance merci
Je travaille aussi sur de la video, et cela m'arrive selon les traitements et cela reste pour l'instant assez obscures... quelles sont tes traitements ? Y'a t'il de la conversion en niveau de gris ? Si oui quelle fonction utilises tu ?
J'ai pu resoudre mes problemes en changeant ma fonction de conversion d'image couleur en niveaux de gris
cvCvtColor(image, m_grayImage, CV_BGR2GRAY;
=>
cvConvertImage(image, m_grayImage, 1);
A approfondir.
Voila
Pour etre plus clair, openCV lit les format .AVI upside down par default , il est donc necessaire d'effectué un flip pour la converison niveau de gris
dans cvConvertImage, le 3 eme arguement représente CV_CVTIMG_FLIP qui flip l'image.
Voila
Quand a moi je ne trouve pas de fonction pour effectuer une rotation d'image ( d'angle quelqconque style rotate de MATLAB).....
Pour le moment,
j'ai :
cvCvtColor(img,tmp,CV_RGB2GRAY);
cvConvert(tmp,images(current));
et la fonction cvConvertImage de HighUi (et pas cv) a résolu le problème merci![]()
Pour ton problème de rotation :
cv2DRotationMatrix() and cvWarpAffine()
(2×3 transformation matrix pour le premier notamment)
car dans tous les cas, il faudra que tu écrives ta rotation sous la forme de matrice de transformation affine
La rotation est du a l'origine de l'imageIl faut se remetrre a l'origine
voici un exemple:
m_grayImage->origin = Image->origin;
Image->origin = m_grayImage->origin;
ca depend de ta declaration
Bonjour à tous.
Je travail actuelement sur un projet de robot suiveur de lazer, et je suis bloqué sur une fonction opencv : cvCvtColor(...,...,...)
Je tiens à préciser que je travail sur LINUX.
En me balladant sur internet, j'ai compris que le premier argument correspond à l'image de départ, que le second argument correspond à l'image destinataire, et que le dernier argument correspond aux couleurs.
Voila ce que j'ai pour le moment :
#ifdef _CH_
#pragma package <opencv>
#endif
#ifndef _EiC
#include "cv.h"
#include "highgui.h"
#include <ctype.h>
#include <stdio.h>
#endif
int main( int argc, char** argv )
{
CvCapture* capture = 0; //Initialisation de la cam.
capture = cvCaptureFromCAM( 0 );
if( !capture ) //Si erreur lors de l'initialisation de la Cam.
{
fprintf(stderr,"Could not initialize capturing...\n");
cvWaitKey(0); //fermeture de la fenetre
return -1;
}
//Fenetre de visualisation de la CAM originale :
cvNamedWindow( "capture", 0 );
//Fenetre de visualisation de la CAM au niveau du gris.
cvNamedWindow( "captureGrey", 0);
for( ;; )
{
IplImage* frame = 0;
IplImage* frameGrey = 0;
int i;
frame = cvQueryFrame( capture ); //On recupere l'image original
//Recupere l'image situé dans "frame" puis la ré-introduit dans "frameGrey" en Noir et Blanc:
cvCvtColor(frame,frameGrey,CV_RGB2GRAY);
if( !frame )
break;
cvShowImage("capture", frame ); //Affichage de l'image recuperée.
cvShowImage("captureGrey", frameGrey ); //Affiche de l'image modifiée.
cvWaitKey(10); //Si argument = 0, alors attente qu'une touche soit préssée, ici fontionnement en mode CAM.
}
cvReleaseCapture( &capture );
cvDestroyWindow("capture"); //Libère l'espace mémoire utilisé.
cvDestroyWindow("captureGrey"); //Libère l'espace mémoire utilisé.
return 0;
}
#ifdef _EiC
main(1,"laplace.c");
#endif
Cela ne fonctionne pas et un message d'erreur apparait dans la console. L'aquisition de l'image fonctionne bien, car en enlevant : cvCvtColor(frame,frameGrey,CV_RGB2GRAY);
Je récupère bien une fenêtre avec la visualisation de la webcam.
Quelqu'un pourrait-il m'éclairer?
Merci.
Bonjour,
La réponse est un peut tard, mais si même tu t'en servira pas d'autre il vont l'utiliser, j'espère![]()
Est ensuite tu utilise frame_copy pout le reste de ton programme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 frame_copy = cvCreateImage( cvSize(frame->width,frame->height), IPL_DEPTH_8U, frame->nChannels ); if( frame->origin == IPL_ORIGIN_TL ) cvCopy( frame, frame_copy, 0 ); else cvFlip( frame, frame_copy, 0 );![]()
Partager