, so kann ich meinen Webcam-Stream mit OpenCV mit imshow mit diesem einfachen CodeShow Webcam-Stream von OpenCV mit Qt
int main(int, char**)
{
VideoCapture cap(0);
Mat edges;
namedWindow("webcam", 1);
while (true)
{
Mat frame;
cap >> frame;
imshow("webcam", frame);
if (waitKey(30) >= 0) break;
}
return 0;
}
jetzt sehen, was ich möchte, ist das Bild von OpenCV in QImage in Widget auf QT zu zeigen, Hier ist eine Umwandlung von cv :: Mat zu QImage
QImage Mat2QImage(cv::Mat const& src)
{
cv::Mat temp;
cvtColor(src, temp, CV_BGR2RGB);
QImage dest((const uchar *)temp.data, temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
dest.bits();
// of QImage::QImage (const uchar * data, int width, int height, Format format)
return dest;
}
und dem kleinen Code ein Bild mit QImage in QT zu zeigen
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QImage myImage;
myImage.load("a.png");
QLabel myLabel;
myLabel.setPixmap(QPixmap::fromImage(myImage));
myLabel.show();
return a.exec();
}
Ich habe versucht, sie auf diese Weise zu kombinieren, aber kein Glück
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
VideoCapture cap(0);
QImage myImage;
QLabel myLabel;
while (true)
{
Mat frame;
cap >> frame; // get a new frame from camera
myImage = Mat2QImage(frame);
myLabel.setPixmap(QPixmap::fromImage(myImage));
}
myLabel.show();
return a.exec();
Dies ist nicht, wie Es klappt. Du gehst in eine Endlosschleife: Wie kannst du irgendetwas sehen, da die 'myLabel.show()' * nach * der Schleife ist? – Boiethios
Das Streaming von einem Gerät sollte zusammen mit einer Verarbeitung der Bilddaten in einem separaten Thread erfolgen. Wenn Sie früher oder später tun, was Sie tun, müssen Sie Ihren Code neu schreiben. Überprüfen Sie ein paar Videos, die ich gemacht habe auf Integration von OpenCV mit Qt: https://www.youtube.com/watch?v=vKIEzqmeajQ&index=1&list=PLxpCFVM0F4wWJm8LB-_-_U-ag6knR8Kmc&ab_channel=rbaleksandar Beachten Sie, dass Sie auch verwenden können, benutzerdefiniertes 'QThread' und du musst dich nicht an das Worker-Muster halten, das ich im Tutorial verwendet habe. – rbaleksandar