OpenCV显示ffmpeg解码图像

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)的处理时间为十几到二十几毫秒。这可能导致阻塞了解码显示的线程,造成丢帧。如果输入视频的帧率过高,则需要跳帧回显。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容