OpenCV 라이브러리의 방법으로 프레임을 재생하여 비디오를 처리하려고하는데 여기에 opencv/highgui의 imshow
메서드를 사용하여이 프레임을 표시하면 문제가 없습니다.Qt gui 응용 프로그램을 통해 비디오 프레임을 표시하는 방법은 무엇입니까?
그러나 Qt-gui 앱을 사용하여 실시간으로 표시 할 때는 관리 할 수 없습니다.
프로그램은 openfile 대화 상자에서 비디오의 경로를 가져오고 while 루프 내에서 비디오 프레임을 grap하고 처리합니다. 처리 단계 후에 QLabel에 이러한 처리 된 프레임을 표시하려고하면 gui-app의 QLabel에 비디오의 길이에 따라 아무 것도 표시되지 않고 비디오 마지막 부분의 마지막 프레임 만 표시됩니다. 각 프레임의 레이블을 새로 고치거나 업데이트하려고했지만 작동하지 않았습니다.
내가 할 일이 없습니까? 아니면 더 편리한 방법이 있습니까?
내 코드에 필요한 부분은 다음과 같습니다. 미리 감사드립니다.
bool stop=false;
cv::VideoCapture capture("a.avi");
cv::Mat cur_frame;
while (!stop) {
//...
capture.read(cur_frame);
//process steps..
QImage img= QImage((const unsigned char*)(cur_frame.data),
cur_frame.cols,cur_frame.rows,
QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
// resize the label to fit the image
ui->label->resize(ui->label->pixmap()->size());
//...
cv::waitkey(50);
}
고마워요 아놀드, 적어도 지금은 유용합니다. 그 외에,이 작업을 수행하기위한 최적의 접근 방법은 무엇일까요? 프레임을 Qlabel을 사용하여이 작업을 처리하는 데 사용할 수있는 적합한 방법을 표시합니까? (QT를 잘 모르기 때문에 Qlabel을 사용했습니다.) – Horizon1710
불행히도 나는 최선의 방법으로 당신에게 좋은 대답을하지 못했습니다. 그것을하기 위해. Qt로 실시간 비디오처럼 까다로운 작업을 수행하지 않았습니다. –
비록 이것이 오래된 질문이지만이 대답 (http://stackoverflow.com/a/2671834/1990758)이 도움이 될 수 있음을 지적하고자합니다. – Energy