Bonjour,

Je travail en ce moment sur un projet utisant Qt 5. Le but utiliser opencv.
Une bibliothèque d'analyse très puissante de flux vidéo et d'images.

Notre but, analyser un terrain de sport et tracker les joueurs dans un but d'analyse du jeu : stratégies, infos vitesse, nombres de passes....
Il y aura évidement une interface de visualisation des données du terrain en 2d (comme sur un Football Manager).

1) intégrer OpenCV:

opencv en simplifier:
- open fd : camera, video file...
- read each frame as cv::Mat
- apply filter function in place or in matrice copy
- en tirér des informations
- draw Mat in screen (se peut être la matrice original par dessus laquelle on dessine des infos, face tracker on webcam par exemple)
ou alors on affiche les matrice avec filtre par exemple en niveau de gris...

En gros Qt s'occupe de l'ouverture des stream que se soit caméra ou fichier vidéo
Il y a QPixmap, QImage et peut être d'autre. Il faut transformer un de ceux la en cv::Mat, faire l'analyse.
Qu'elle serait la suite de transformation de types Qt -> cv et cv -> Qt efficace .

Pourriez vous m'orienté vers les classes (peut être abstraites et a redéfinir) car ils y en a beaucoup et la hiérarchie est profonde ?
Notamment si l'on doit dessiner des informations dans un rectangle tpye Canvas ou l'on peut superposer le flux vidéo et des informations par dessus sans que cela relève du hack.
Mettre en pause comme un lecteur et cetera.

QAbstractPlanarVideoBuffer, QAbstractVideoBuffer, QAbstractVideoSurface, QMediaObject, QMediaPlayer, QVideoFrame, ...


2) Architecture Applicative

On travaillera avec Qt. Mais de mon coté je me pose la question de la manière d'architecturer l'application.
Vaut il mieux QML/js ou alors QML/c++ et de quel manière (il y a plusieurs manière de lier QML et c++) ou c++ et UI Designer ?

Une application c++ ui c'est une MyAppWindow qui hérite de MainWindow le plus souvent et le code de main est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
#import <QApplication>
#import <MyAppWindow>
 
int main(int ac, char **av) {
    QApplication app(ac, av);
    MyMainWindow win;
 
    win.show();
    return app.exec();
}
alors qu'une app QML n'utilise qu'un QmlAppEngine.

Existe t'il une manière élégante et propre de lier une application au départ utilisant des UI et du c++ et aussi du QML ?
Je sais qu'il existe QWidget::createWindowContainer().
Mais entre le QQmlEngine, les QQuickView et cie c'est un puzzle de classes imbriquées et il n'y a pas beaucoup d'infos sur le Web.

Le problème c'est qu'en C++ c'est simple: pour créer un widget on créer une Classe : MonWidget.cpp et idem.h et idem.ui associé.
Et on peut l'intégrer.

De l'autre coté en QML on est orienté Composant et ce n'est pas la même manière de pensée.

On parle souvent de MVC. Mais le QML fait les 3 en même temps.
Si on choisis QML qu'elle est la manière de liée du c++. J'ai trouvé des tutoriels.
Mais c'est cryptique la différence entre qmlRegisterType et contextSetProperty() et souvent c'est pré QT 5.x (QDeclarative et cetera)

Désolé si le post semble embrouillé.

Merci d'avance,