проблема с отображением живого видео в приложении qt c ++

Я хочу показать прямую трансляцию камеры, подключенной к raspberry, в приложении qt (ОС Linux). Погуглив, я обнаружил, что должен показывать видео внутри QLabel. При отображении изображения проблем нет, и все работает нормально, но когда я хочу отобразить прямой эфир внутри QLabel, окно прямого потока открывается отдельно (не внутри QLabel). подскажите, как решить эту проблему? вот мой код:

void Dialog::on_Preview_clicked()
{
command = "raspistill";
args<<"-o"<<"/home/pi/Pictures/Preview/"+Date1.currentDateTime().toString()+".jpg"<<"-t"<<QString::number(20000);
Pic.start(command,args,QIODevice::ReadOnly);
QPixmap pix("//home//pi//Pictures//Preview//test.jpg");
ui->label_2->setPixmap(pix);
ui->label_2->setScaledContents(true);
}

Этот код открывает экран захвата видео и захватывает изображение через 20 секунд. Единственная проблема заключается в том, что экран захвата (который может быть использован в качестве живого потока). не отображается внутри «Lable_2». Есть ли способ сделать это без использования библиотеки OpenCV? Если нет, подскажите, как это сделать с помощью OpenCV.

Спасибо

1

Решение

Это довольно просто в opencv

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened())  // check if we succeeded
return -1;

Mat edges;
namedWindow("edges",1);
for(;;)
{
Mat frame;

cap >> frame; // get a new frame from camera

imshow("edges", frame);
if(waitKey(30) >= 0) break;
}
return 0;
}
0

Другие решения

Поток камеры с помощью OpenCVи показать это в QLabel возможно.
Когда QCamera не работает, а также использовать OpenCV в проекте, может использовать VideoCapture потоковое видео вместо QCamera.

Проблема может быть разбита на несколько этапов. В основном нам нужно:

  1. Создать QThread для потоковой передачи (не позволяйте потоку GUI заблокирован).
  2. В подпотоке, используя cv::VideoCapture чтобы захватить кадр в cv::Mat,
  3. Преобразовать cv::Mat в QImage(как конвертировать OpenCV CV :: Mat в Qimage).
  4. Проходить QImage кадр из подпотока в основной поток графического интерфейса.
  5. Краска QImage на QLabel,

Я положил полный демонстрационный код в Github. это может нарисовать рамку на QLabel и QML VideoOutput,

0

По вопросам рекламы [email protected]