Le flux de travail de base pour faire ce que vous désirez est :
- Ouvrir la vidéo avec l'API OpenCV (cvCreateFileCapture, par exemple)
- Récupérer les images IplImage de la vidéo (cvQueryFrame)
- Les convertir en QImage (voir le code joint ci-dessous)
- Afficher une QImage dans un QLabel (QLabel::setPixmap et QPixmap::fromImage)
- Mettre en boucle la mise à jour de la trame (en utilisant un QTimer, par exemple, avec le framerate vidéo)
Code pour convertir IplImage en QImage (en supposant des images RGB32Bits) :
QImage *IplImageToQImage(IplImage *input)
{
if (!input)
return 0;
QImage image(input->width, input->height, QImage::Format_RGB32);
uchar* pBits = image.bits();
int nBytesPerLine = image.bytesPerLine();
for (int n = 0; n < input->height; n++)
{
for (int m = 0; m < input->width; m++)
{
CvScalar s = cvGet2D(input, n, m);
QRgb value = qRgb((uchar)s.val[2], (uchar)s.val[1], (uchar)s.val[0]);
uchar* scanLine = pBits + n * nBytesPerLine;
((uint*)scanLine)[m] = value;
}
}
return image;
}
La compréhension du code ci-dessus devrait être simple. Si vous avez des doutes, n'hésitez pas à nous en faire part.
Cette option de "bas niveau" vous permet de manipuler chaque image individuelle avant de l'afficher. Si vous souhaitez simplement afficher une vidéo via Qt, vous pouvez utiliser la fonction Cadre phonologique .