最近在研究OpenCV时发现,重复调用cv::imshow("frame", frame)时,会显示出上一次的图片。
网上搜索了方法,有以下3种因素可能导致:
1. 图像变量未正确更新:可能在更新 frame
变量之前就已经调用了 imshow
。frame数据未清空;
2.绘制延迟:有时,由于绘制或渲染的延迟,上一帧的图像可能会短暂显示。这通常发生在高帧率或低延迟的应用中;
3.窗口未正确刷新:在某些情况下,窗口可能没有正确刷新以显示新的图像。
检查代码,发现在关闭摄像头时,未对frame队列数据清空,导致全局变量frames中还存在frame数据。使用while循环,调用queue队列的 pop方法,将数据清空后问题就解决了。