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

本文介绍如何利用Python和OpenCV从摄像头捕获视频并转换为灰度图像进行显示。详细展示了使用cv2.VideoCapture初始化摄像头的方法,并解释了如何判断摄像头是否成功打开,以及如何通过cap.read()获取视频帧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- 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)。


ros2 run mycobot_280 opencv_camera [ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (2075) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Cannot identify device '/dev/video0'. [ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (1053) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (616) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created [ WARN:0] global ./modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video0): can't open camera by index [ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (2075) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src1 reported: Cannot identify device '/dev/video1'. [ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (1053) open OpenCV | GStreamer warning: unable to start pipeline [ WARN:0] global ./modules/videoio/src/cap_gstreamer.cpp (616) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created [ WARN:0] global ./modules/videoio/src/cap_v4l.cpp (890) open VIDEOIO(V4L2:/dev/video1): can't open camera by index [INFO] [1752400144.035655646] [image_publisher]: 0 摄像头开启成功! Traceback (most recent call last): File "/home/wzr/m2_ws/moveit2_ws/install/mycobot_280/lib/mycobot_280/opencv_camera", line 33, in <module> sys.exit(load_entry_point('mycobot-280==0.0.0', 'console_scripts', 'opencv_camera')()) File "/home/wzr/m2_ws/moveit2_ws/install/mycobot_280/lib/python3.10/site-packages/mycobot_280/opencv_camera.py", line 48, in main rclpy.spin(img_pub) File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/__init__.py", line 226, in spin executor.spin_once() File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 751, in spin_once self._spin_once_impl(timeout_sec) File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 748, in _spin_once_impl raise handler.exception() File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/task.py", line 254, in __call__ self._handler.send(None) File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 447, in handler await call_coroutine(entity, arg) File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 361, in _execute_timer await await_or_execute(tmr.callback) File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 107, in await_or_execute return callback(*args) File "/home/wzr/m2_ws/moveit2_ws/install/mycobot_280/lib/python3.10/site-packages/mycobot_280/opencv_camera.py", line 39, in timer_callback self.image_pub.publish(self.bridge.cv2_to_imgmsg(frame, 'bgr8')) File "/opt/ros/humble/local/lib/python3.10/dist-packages/cv_bridge/core.py", line 261, in cv2_to_imgmsg raise TypeError('Your input type is not a numpy array') TypeError: Your input type is not a numpy array [ros2run]: Process exited with failure 1
最新发布
07-14
ktngththdexes:https://pypi.tuna.tsinghua.edu.cn/simple lecting opencv-python-headless==4.5.5.64 ownloading https://pypi.tuna.tsinghua.edu.cn/packages/43/03/13447b012f11ed59948a1f09fc791bd2fbc32a cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (26.7 MB) | 26.7 MB 11 kB/s quirement already satisfied: numpy>=1.19.3 in./archiconda3/envs/szy/lib/python3.6/site-packages (fr stalling collected packages: opencv-python-headless ccessfully installed opencv-python-headless-4.5.5.64 zy)songzhiyi@songzhiyi-desktop:~$ code zy)songzhiyi@songzhiyi-desktop:~$ cd CSI szy)songzhiyi@songzhiyi-desktop:~/CSI$ python video.py raceback (most recent call last): File "video.py", line 1, in <module> import cv2 File "/home/songzhiyi/archiconda3/envs/szy/lib/python3.6/site-packages/cv2/__init_.py",line 190, in bootstrap() File "/home/songzhiyi/archiconda3/envs/szy/lib/python3.6/site-packages/cv2/__init__.py",line 184, in b if_load_extra_py_code_for_module("cv2", submodule, DEBUG): File "/home/songzhiyi/archiconda3/envs/szy/lib/python3.6/site-packages/cv2/__init__.py",line 37,in_1py_module = importlib.import_module(module_name) File "/home/songzhiyi/archiconda3/envs/szy/lib/python3.6/importlib/__init__.py",line 126, in import_mod return _bootstrap._gcd_import(name[level:], package, level) File "/home/songzhiyi/archiconda3/envs/szy/lib/python3.6/site-packages/cv2/typing/__init__.py", line 162,LayerId = cv2.dnn.DictValue AttributeError: module 'cv2.dnn' has no attribute 'DictValue (szy) songzhiyi@songzhiyi-desktop:~/CSI$
06-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值