美文网首页
OpenCV显示ffmpeg解码图像

OpenCV显示ffmpeg解码图像

作者: 叶迎宪 | 来源:发表于2024-01-16 15:06 被阅读0次
void DisplayFrame(AVFrame* frame)
{
    cv::Mat y_img;
    y_img.create(frame->height, frame->width, CV_8UC1);

    uint8_t* dst = y_img.data;
    uint8_t* src = frame->data[0];

    for (int j = 0; j < frame->height; j++)
    {
        memcpy(dst, src, frame->width);
        dst += frame->width;
        src += frame->linesize[0];
    }

    namedWindow("matrix", WINDOW_NORMAL);
    resizeWindow("matrix", 512, 512);
    imshow("matrix", y_img);
    waitKey(1);
}

注释:
1、imshow之后,并不会立即显示图像,必须有waitKey调用之后才会显示。这是因为opencv需要处理有机会处理窗体的事件循环,只有调用了waitKey才有机会处理事件循环
https://stackoverflow.com/questions/20561430/opencv-imshow-not-rendering-image-on-screen

2、waitKey(1)并不一定1ms才结束调用。如果需要处理窗体的显示,则实测waitKey(1)的处理时间为十几到二十几毫秒。这可能导致阻塞了解码显示的线程,造成丢帧。如果输入视频的帧率过高,则需要跳帧回显。

相关文章

网友评论

      本文标题:OpenCV显示ffmpeg解码图像

      本文链接:https://www.haomeiwen.com/subject/gcjkodtx.html