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