VideoCapture_read.py cap.read() 返回一个布尔值(True/False)

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 3 21:06:22 2014

@author: duan
"""

import numpy as np
import cv2

cap = cv2.VideoCapture(1)
if cap.isOpened():
  while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()
    if ret==True:
      # Our operations on the frame come here
      gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

      # Display the resulting frame
      cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
     break

  # When everything done, release the capture
  cap.release()
  cv2.destroyAllWindows()
else:
  print 'cap is not Opened!'


cap.read() 返回一个布尔值(True/False)。如果帧读取的是正确的,
就是True。所以最后你可以通过检查他的返回值来查看视频文件是否已经到
了结尾。
有时cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报
错。你可以使用cap.isOpened(),来检查是否成功初始化了。如果返回值是
True,那就没有问题。否则就要使用函数cap.open()。
你可以使用函数cap.get(propId) 来获得视频的一些参数信息。这里
propId 可以是0 到18 之间的任何整数。每一个数代表视频的一个属性,见
下表
其中的一些值可以使用cap.set(propId,value) 来修改,value 就是
你想要设置成的新值。
例如,我可以使用cap.get(3) 和cap.get(4) 来查看每一帧的宽和高。
默认情况下得到的值是640X480。但是我可以使用ret=cap.set(3,320)
和ret=cap.set(4,240) 来把宽和高改成320X240。
注意:当你的程序报错时,你首先应该检查的是你的摄像头是否能够在其他程
序中正常工作(比如linux 下的Cheese)。


非常抱歉,我之前给出的示例代码中存在错误。在OpenCV中,`cv2.where`函数不存在,所以导致了`AttributeError: module 'cv2' has no attribute 'where'`的错误。 请改用`cv2.findNonZero`函数来获取匹配结果大于阈值的位置。以下是更新后的示例代码: ```python import cv2 import numpy as np def find_template(template_path, video_device): # 读取模板图片 template = cv2.imread(template_path, 0) # 打开视频流 cap = cv2.VideoCapture(video_device) while True: # 读取视频帧 ret, frame = cap.read() if not ret: print("无法读取视频流") break # 转换为灰度图像 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 进行模板匹配 result = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED) # 设置匹配阈值 threshold = 0.8 # 获取匹配结果大于阈值的位置 loc = np.where(result >= threshold) # 在原始图像中绘制矩形框 for pt in zip(*loc[::-1]): cv2.rectangle(frame, pt, (pt[0] + template.shape[1], pt[1] + template.shape[0]), (0, 255, 0), 2) # 显示图像 cv2.imshow('Video', frame) # 按下 'q' 键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放视频流和窗口 cap.release() cv2.destroyAllWindows() # 指定模板图片和视频设备索引 template_path = 'template.png' video_device = 0 # 调用函数进行模板匹配 find_template(template_path, video_device) ``` 这次使用了`np.where`函数来获取匹配结果大于阈值的位置。希望这次能够正常运行。如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值