IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GLC_lib Discussion :

GLC_lib et OpenCV


Sujet :

GLC_lib

  1. #1
    Membre confirmé
    Avatar de laumaya
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Août 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Août 2008
    Messages : 82
    Points : 456
    Points
    456
    Par défaut GLC_lib et OpenCV
    Bonjour,
    Voici une video de présentation de l'utilisation de GLC_lib conjointement avec OpenCV pour la capture en temps réel de la vidéo d'une webcam projeté sur 64 rectangles dans une scène 3D.



    @+

    Laurent Ribon
    Images attachées Images attachées  
    laumaya : Article [Introduction à GLC_lib]. Forum[GLC_lib] Projets [GLC_lib]; [GLC_Player]

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu veux pas mettre le code source histoire de voir comment tu as fais ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre confirmé
    Avatar de laumaya
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Août 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Août 2008
    Messages : 82
    Points : 456
    Points
    456
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Tu veux pas mettre le code source histoire de voir comment tu as fais ?
    Avec plaisir

    J'utilise opencv 2.2.0 pour Mac et bien sur GLC_lib 2.1.0.
    Le code de départ est basé sur l'exemple 7 fournie avec GLC_lib.
    Le premier code que je présente n'est pas de moi, je l'ai juste adapté. il consisste à convertir une image opencv "IplImage" en une image Qt4 "QImage). le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    QImage GLWidget::IplImage2QImage(IplImage *iplImg)
    {
    	int h = iplImg->height;
    	int w = iplImg->width;
    	int channels = iplImg->nChannels;
    	QImage qimg(w, h, QImage::Format_ARGB32);
    	char *data = iplImg->imageData;
     
    	for (int y = 0; y < h; y++, data += iplImg->widthStep)
    	{
    		for (int x = 0; x < w; x++)
    		{
    			char r, g, b, a = 0;
    			if (channels == 1)
    			{
    				r = data[x * channels];
    				g = data[x * channels];
    				b = data[x * channels];
    			}
    			else if (channels == 3 || channels == 4)
    			{
    				r = data[x * channels + 2];
    				g = data[x * channels + 1];
    				b = data[x * channels];
    			}
     
    			if (channels == 4)
    			{
    				a = data[x * channels + 3];
    				qimg.setPixel(x, y, qRgba(r, g, b, a));
    			}
    			else
    			{
    				qimg.setPixel(x, y, qRgb(r, g, b));
    			}
    		}
    	}
    	return qimg;
    }
    Le constructeur de la classe GLWidget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    GLWidget::GLWidget(QWidget *p_parent)
    : QGLWidget(p_parent)
    , m_Light()
    , m_World()
    , m_GlView(this)
    , m_MoverController()
    , m_MotionTimer()
    , m_pCapture(NULL)
    , m_pTexturedMaterial(NULL)
    {
    	m_Light.setPosition(1.0, 1.0, 1.0);
     
    	QColor repColor;
    	repColor.setRgbF(1.0, 0.11372, 0.11372, 1.0);
    	m_MoverController= GLC_Factory::instance()->createDefaultMoverController(repColor, &m_GlView);
     
    	m_GlView.cameraHandle()->setDefaultUpVector(glc::Z_AXIS);
    	m_GlView.cameraHandle()->setIsoView();
     
    	// Create objects to display
    	CreateScene();
    	connect(&m_MotionTimer, SIGNAL(timeout()), this, SLOT(updateTexture()));
     
    	setAttribute(Qt::WA_AcceptTouchEvents, true);
    }
    La fonction de création de la scène :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    void GLWidget::CreateScene()
    {
    	// Load Backfround image.
    	m_GlView.loadBackGroundImage(":fond_exemple07.png");
     
    	// create a material with the specified texture
    	// test OpenCV
    	m_pCapture = cvCreateCameraCapture( -1 );
     
    	IplImage *iplImage;
    	cvGrabFrame(m_pCapture);
    	iplImage = cvRetrieveFrame(m_pCapture);
     
    	const double h = static_cast<double>(iplImage->height);
    	const double w = static_cast<double>(iplImage->width);
     
    	QImage textureImage= IplImage2QImage(iplImage);
    	GLC_Texture* pTexture= GLC_Factory::instance()->createTexture(textureImage);
    	m_pTexturedMaterial= new GLC_Material(pTexture, "");
     
    	GLC_3DRep rep= GLC_Factory::instance()->createRectangle(w, h);
    	rep.geomAt(0)->addMaterial(m_pTexturedMaterial);
    	GLC_StructReference* pRef= new GLC_StructReference();
    	pRef->setRepresentation(rep);
    	const int size= 8;
    	for (int i= 0; i < size; ++i)
    	{
    		const double deltaX= static_cast<double>(i) * w + (w / 10.0);
    		GLC_Matrix4x4 matrix1(deltaX, 0.0, 0.0);
     
    		for (int j= 0; j < size; ++j)
    		{
    			const double deltaY= static_cast<double>(j) * h + (h / 10.0);
    			GLC_Matrix4x4 matrix(GLC_Matrix4x4(0.0, deltaY, 0.0) * matrix1);
     
    			GLC_StructInstance* pInstance= new GLC_StructInstance(pRef);
    			pInstance->move(matrix);
    			m_World.rootOccurence()->addChild(pInstance);
    		}
     
    	}
     
    	m_MotionTimer.start(60);
     
    }
    Et pour finir, la méthode de mise à jour de la texture utilisée par les rectangles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void GLWidget::updateTexture()
    {
    	if ( NULL != m_pTexturedMaterial)
    	{
    		IplImage *iplImage;
    		cvGrabFrame(m_pCapture);
    		iplImage = cvRetrieveFrame(m_pCapture);
    		QImage textureImage= IplImage2QImage(iplImage);
    		GLC_Texture* pTexture= GLC_Factory::instance()->createTexture(textureImage);
    		m_pTexturedMaterial->setTexture(pTexture);
    		updateGL();
    	}
    }


    @+

    Laurent Ribon
    laumaya : Article [Introduction à GLC_lib]. Forum[GLC_lib] Projets [GLC_lib]; [GLC_Player]

Discussions similaires

  1. OpenCV sous vista
    Par gandanlf dans le forum OpenCV
    Réponses: 10
    Dernier message: 16/03/2007, 15h55
  2. probleme avec opencv
    Par dz_robotix dans le forum Visual C++
    Réponses: 2
    Dernier message: 06/03/2007, 10h39
  3. Réponses: 1
    Dernier message: 01/10/2006, 15h44
  4. Traitement d'image java OpenCV
    Par moris113 dans le forum Multimédia
    Réponses: 1
    Dernier message: 12/07/2006, 19h12
  5. [Qt]Afficher une image d'openCV dans un pixmap
    Par astragoth dans le forum Qt
    Réponses: 8
    Dernier message: 14/03/2006, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo