python - with()语句从opencv中的VideoCapture读取?

标签 python opencv with-statement

我喜欢使用 with 语句来访问文件和数据库连接,因为它会在出现错误或文件关闭时自动断开连接。

f = open('file.txt', 'r')
for i in f():
   print(i)
f.close()

对比

with open('file.txt', 'r') as f:
   for i in f:
       print(i)

下面是否有从相机缓冲区读取的等效改写?:

c = cv.VideoCapture(0)    
while(1):
    _,f = c.read()
    cv.imshow('e2',f)
    if cv.waitKey(5)==27:
        cv.waitKey()
        break
c.release()

我试过:

c = cv.VideoCapture(0)    
while(1):
   with c.read() as _,f:
       cv.imshow('e2',f)
       if cv.waitKey(5)==27:
           cv.waitKey()
           break

---没有运气。看起来拆卸/发布是一种不同的功能。这个成语在这里可能吗?

最佳答案

另一种使用 contextlib.contextmanager 的方法:

from contextlib import contextmanager

@contextmanager
def VideoCapture(*args, **kwargs):
    cap = cv2.VideoCapture(*args, **kwargs)
    try:
        yield cap
    finally:
        cap.release()

(注意:接受的答案已被编辑以包含此建议)

关于python - with()语句从opencv中的VideoCapture读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19086343/

相关文章:

python - 为什么我无法安装 flask (PIP 错误)?

c++ - 具有 const cv::Mat 类型的参数在功能上会发生变化吗?

python - conda 安装失败,即使我通过 conda 信息包找到了包

c++ - 在 OpenCV 中访问数组的元素

python - 理解上下文管理器类中返回 self 的目的

python - 更改 Python Cmd 模块处理自动完成的方式

python - 将图像添加到 Swagger 文档

VB.NET 在现有对象上使用 With 关键字?

python - 如何使用 Python 3 在 requests.get() 请求期间抑制 http.client 异常日志记录

python 3.0 "with"语法错误?