Il flusso di lavoro di base per fare ciò che si desidera è:
- Aprire il video con OpenCV API (cvCreateFileCapture, per esempio)
- Grab IplImage fotogrammi dal video (cvQueryFrame)
- convertirli in QImage (vedi allegato soffietto codice)
- Mostra QImage su di un QLabel (QLabel :: setPixmap e QPixmap :: fromImage)
- loop l'aggiornamento telaio (utilizzando un QTimer, per esempio, con framerate video)
codice per convertire IplImage a QImage (supponendo RGB32Bits immagini):
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 comprensione del codice di cui sopra dovrebbe essere semplice. Qualsiasi dubbio, faccelo sapere.
Questa opzione "livello basso" consente di manipolare ogni singolo fotogramma prima di visualizzarlo. Se si desidera visualizzare un video tramite Qt, è possibile utilizzare Phonon framework.
Non so, come integrare le finestre di 'opencv' in Qt, ma se si ottiene' IplImage' su qualsiasi livello, può essere facilmente convertito in 'QImage' e' QPixMap', che possono essere visualizzati su 'QLabel' – Lol4t0
Come Lol4t0, non so come integrare un video di OpenCV all'interno di alcuni QWidget. Ma posso rispondere a come farlo facilmente manualmente. È davvero semplice. – borges
@borges Quindi per favore rispondi :) – zebra