为了使显示更快,只IPython.display.display
在笔记本内部使用 JPG 格式而不是 PNG。(注意cv2.imshow
在笔记本外以本地方式显示要快得多,但这不是问题所要求的):
下面的代码将测试所有支持的文件格式以找到最快的文件格式(使用正则表达式提取__doc__
,不可靠)
from IPython.display import clear_output, Image, display, HTML
import cv2
# Read one frame from the camera for testing
video = cv2.VideoCapture(0)
_, frame = video.read()
video.release()
import re
from timeit import timeit
import math
extensions=re.findall(r"\\\*(\.\w*)", cv2.imread.__doc__)
def test(extension):
try:
totalTime=0
numTry=3
for _ in range(numTry):
totalTime+=timeit(lambda: display(Image(data=cv2.imencode(extension, frame)[1])), number=1)
clear_output(wait=True)
return totalTime/numTry, extension
except cv2.error as e: #usually "unsupported file type"
return (math.inf, extension, e)
for x in sorted(
[test(extension) for extension in extensions], key=lambda x: x[0]
): print(x)
就我而言,.jpeg
是最快的。确保浏览器显示也支持该扩展:
Image(data=cv2.imencode(".jpeg", frame)[1].tobytes())
然后,播放视频:
import cv2
from IPython.display import display, Image
video = cv2.VideoCapture(0)
display_handle=display(None, display_id=True)
try:
while True:
_, frame = video.read()
frame = cv2.flip(frame, 1) # if your camera reverses your image
_, frame = cv2.imencode('.jpeg', frame)
display_handle.update(Image(data=frame.tobytes()))
except KeyboardInterrupt:
pass
finally:
video.release()
display_handle.update(None)
update
每次都比clear_output
+快一点;display
但是与渲染相比,它并不是一个显着的改进。