首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:理解OpenCV中的read()

Python:理解OpenCV中的read()
EN

Stack Overflow用户
提问于 2021-01-02 12:10:08
回答 3查看 708关注 0票数 1

我正在看一个OpenCV教程,他在一个地方写了这样的代码:

代码语言:javascript
复制
while True:
   success, img = cap.read() 
   cv2.imshow("Video", img)
   if (cv2.waitKey(1) & 0xFF ==ord('q')):
      break

我对第二行感到困惑。根据画外音,它将读取的图像存储在img中,并将一个布尔值保存到success中,记录我们是否能够读取图像。这事儿可以理解。我只是不知道success的用途,但是如果我删除它,第3行就会出现错误。

根据imshow()方法,它只接受窗口名称的字符串,然后是img (我们上面有)。所以我不确定为什么需要success

(除了import语句之外,屏幕上没有其他代码)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-02 12:15:34

cap.read()返回的是布尔值(真/假)和图像内容。如果删除successimg变量会将该布尔值和图像数据作为元组。这就是为什么你会得到一个错误。

OpenCV中的.read()返回两件事:布尔值和数据。如果没有2个变量,则会将一个元组分配给一个变量。布尔值主要用于捕获错误。将一个元组分配给具有2个数据项的1个var有时会很有用,但在这种情况下,您应该创建2个var并将数据拆分为2个变量,以使其更容易。

如果不想将bool赋值给变量,可以使用_作为变量名。

票数 2
EN

Stack Overflow用户

发布于 2021-01-02 16:03:54

cap.read()返回一个元组,其中包含一个布尔值成功标志和视频帧。

如果视频已经结束,则成功标志为False。在这种情况下,框架是空的。

您必须测试该标志并结束循环。

您观看的教程未能做到这一点。它教会你错了。

此外,您必须检查cap.isOpened(),因为打开视频文件(或摄像头)可能会失败,您需要对此做出反应。

下面是正确的代码:

代码语言:javascript
复制
cap = cv2.VideoCapture(...) # open a video file or camera
assert cap.isOpened(), "file/camera could not be opened!"
while True:
   (success, img) = cap.read() # cap.read() always returns a tuple of two things
   if not success: break # you absolutely must check this
   cv2.imshow("Video", img)
   if cv2.waitKey(1) & 0xFF == ord('q'):
      break
票数 1
EN

Stack Overflow用户

发布于 2021-01-02 12:24:47

有关视频采集的阅读,请参考OpenCV文档。它返回被捕获的状态和图像。"success“不是必须的,但推荐使用。它会告诉您是否已成功捕获图像。在您的示例中,如果您在第三行遇到错误,您可以执行img = cap.read()1,然后它应该可以工作。但是,不建议这样做,因为可能由于捕获任何图像失败而返回none。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65535939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档