防止OpenCV的CreateVideoWriter函数在Python中打印到控制台

1 投票
1 回答
1188 浏览
提问于 2025-04-16 06:42

我正在使用Python的OpenCV库,遇到了一点小麻烦。在使用CreateVideoWriter这个函数时,每次调用它,控制台都会打印出一些类似下面的内容,而我似乎无法让它不显示这些信息,或者更理想的是,把这些信息重定向到一个变量里。

Output #0, avi, to 'temp/Temp.0433.avi':
    Stream #0.0: Video: mjpeg, yuvj420p, 320x240, q=2-31, 9830 kb/s, 90k tbn, 25
 tbc

我用来测试的命令是这个:

self.file = cvCreateVideoWriter(nf,CV_FOURCC('M','J','P','G'),self.fps,cvSize(320,240),1)

虽然这个应用程序最终会有一个控制界面,但现在它是基于控制台的,这个函数每分钟都会被调用一次,这就导致即使是简单的菜单或者更有用的状态信息也很难呈现,因为这些调用会把控制台填得满满的。

我只是想知道有没有人遇到过同样的问题,或者有没有什么想法可以帮助我防止这种情况发生,或者能告诉我我哪里做错了?

1 个回答

1

我觉得你可以通过临时改变 sys.stdout 的方向来解决这个问题,特别是在调用那个复杂的函数的时候。其他方法可能会让你不得不修改 Python 的绑定。

幸运的是,这个操作很简单:只需要使用一个 contextmanager 就可以了:

>>> import contextlib
>>> @contextlib.contextmanager
... def stdout_as(stream):
...     import sys
...     sys.stdout = stream
...     yield
...     sys.stdout = sys.__stdout__
...
>>> print("hi")
hi
>>> import io
>>> stream = io.StringIO()
>>> with stdout_as(stream):
...     print("hi")
...
>>> stream.seek(0)
0
>>> stream.read()
'hi\n'
>>> print("hi")
hi

撰写回答