Bonsoir à tous,
J'avais besoin de réaliser des traitements sur une image capturée depuis une webcam dans le cadre d'un PFE pour un ami, alors je vous fait profiter de ce qu'il faut pour commencer a exploiter sa Webcam.

Le fichier .pro
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
 
QT       += core gui
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
TARGET = CamPreview
TEMPLATE = app
 
 
SOURCES += main.cpp \
    campreiew.cpp
 
HEADERS  += \
    campreview.h
 
LIBS += -lvfw32
 
FORMS    += \
    campreview.ui
le fichier campreview.h

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
 
#ifndef DIALOG_H
#define DIALOG_H
 
#include <QDialog>
#include <windows.h>
 
namespace Ui {
class CamPreviewDialog;
}
 
class CamPreview : public QDialog
{
    Q_OBJECT
 
public:
    explicit CamPreview(QWidget *parent = 0);
    ~CamPreview();
 
private slots:
    bool camConnect();
    bool camDisconnect();
 
private:
    Ui::CamPreviewDialog *ui;
    HWND hWndC;
 
    bool connected;
};
 
#endif // DIALOG_H
le fichier campreview.cpp
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
#include "campreview.h"
#include "ui_campreview.h"
 
#include <QWidget>
#include <QDebug>
 
#include <windows.h>
#include <vfw.h>
 
CamPreview::CamPreview(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::CamPreviewDialog)
{
    ui->setupUi(this);
 
    ui->pbtnConnect->setEnabled(true);
    ui->pbtnDisconnect->setEnabled(false);
 
    connect(ui->pbtnConnect, SIGNAL(clicked()), this, SLOT(camConnect()));
    connect(ui->pbtnDisconnect, SIGNAL(clicked()), this, SLOT(camDisconnect()));
 
    connected = false;
 
    //Creation de HANDLE de la fenetre d'affichage en etant un enfant d'un QWidget (capWidget dans mon cas)
    hWndC = capCreateCaptureWindow(TEXT("My Capture Window"),
        WS_CHILD | WS_VISIBLE, 0, 0, ui->capWidget->width(), ui->capWidget->height(), (HWND) ui->capWidget->winId(), 0);
 
}
 
CamPreview::~CamPreview()
{
    if (connected)
        capDriverDisconnect( hWndC );    //Deconnecter le driver
 
    delete ui;
}
 
 
bool CamPreview::camConnect()
{
 
    //  Lancer la connection sur le driver de la webcam deux fois
    //  (Je ne sais pas pourquoi mais c'est le seul moyen que j'ai trouvé
    //  pour la faire fonctionnée)
    bool OK = capDriverConnect(hWndC, 0);
    OK = capDriverConnect(hWndC, 0);
 
    if( OK )
    {
        capPreviewRate(hWndC, 15);      // Regler le taux de rafrechissement
        capPreviewScale(hWndC, true);   // Activer la mise a l'echelle
        capPreview(hWndC, true);        // Lancer la visualisation
 
 
        connected = true;
        ui->pbtnConnect->setEnabled(false);
        ui->pbtnDisconnect->setEnabled(true);
        qDebug() << "Connection OK" << endl;
    }
    else
        qDebug() << "Connection ERROR" << endl;
 
 
    return OK;
}
 
bool CamPreview::camDisconnect()
{
    capPreview(hWndC, false);           // Arrêter la visualisation
 
    bool OK =  capDriverDisconnect( hWndC );    //Deconnecter le driver
 
    if (OK)
    {        
        connected = false;
        ui->pbtnConnect->setEnabled(true);
        ui->pbtnDisconnect->setEnabled(false);
        qDebug() << "Disconnection OK" << endl;
    }
    else
        qDebug() << "Disconnection ERROR" << endl;
 
 
    return OK;
}
le fichier main.cpp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
#include <QApplication>
 
#include "campreview.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CamPreview camPreview;
    camPreview.show();
 
    return a.exec();
}
Le resultat :

Capture d'écran

j'espère que ça sera utile pour quelqu'un.
Merci