0

OpenCV を使用してビデオからフレームを読み取り、QWidget に表示するビデオ プレーヤーの作成に苦労しています。

これは私のコードです:

// video caputre is opened here
...

void VideoPlayer::run()
{
    int sleep = 1000 / static_cast<unsigned long>(video_capture_.get(CV_CAP_PROP_FPS));
    forever
    {
            QScopedPointer<cv::Mat> frame(new cv::Mat);
            if(!video_capture_.read(*frame))
                break;

            cv::resize(*frame, *frame, cv::Size(640, 360), 0, 0, cv::INTER_CUBIC);
            cv::cvtColor(*frame, *frame, CV_BGR2RGB);

            QImage image(frame->data, frame->cols, frame->rows, QImage::Format_RGB888);

            emit signalFrame(image); // notifying QWidget to draw an image

            msleep(sleep); // wait before we read another frame
    }
}

QWidget側では、この画像を使用してpaintEvent.

ここでは、パラメーターsleepが重要な役割を果たしていないように見えます。(より多くの FPS を取得するために) 減らすほど、ビデオは滑らかではなくなります。

ここで私に残された唯一のことは、そのアプローチが機能しないためにあきらめたことですが、念のためにもう一度ここで尋ねたいと思いました-私はここで何か間違ったことをしていますか?

4

0 に答える 0