美文网首页
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