ubuntu18.04 cv2.VideoCapture无法读取视频

源代码:

# 读取视频

import cv2
video_file = 'cd ~/home/edit/Projects/test/test.mp4'
cap = cv2.VideoCapture(video_file)


# 读取摄像头,0为摄像头索引,当有多个摄像头时,从0开始编号

cap = cv2.VideoCapture(0)

# 从视频或摄像头中读取一帧(即一张图像),返回是否成功标识ret(True代表成功,False代表失败),img为读取的视频帧


ret,frame = cap.read()

问题:

(python3.6:15946): GStreamer-CRITICAL **: 10:44:40.930: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' failed
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (711) open OpenCV | GStreamer warning: Error opening bin: no element "cd"
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (933) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-

状态:
未解决

<think>我们正在回答用户的问题:如何在Ubuntu 18.04系统中调用笔记本摄像头。 根据引用内容,我们可以总结出两种主要方法:使用ROS的usb_cam包和使用OpenCV直接调用。 用户没有提到ROS,但引用了ROS相关的信息,因此我们提供两种方案:一种是不用ROS的简单方法(使用OpenCV),另一种是使用ROS的方法。 由于用户明确说“我想在Ubuntu 18.04系统中调用电脑摄像头”,我们可以先给出最简单的OpenCV方法,然后如果用户有ROS环境再提供ROS方法。 步骤: 方法一:使用OpenCV(无需ROS) 1. 安装OpenCV 2. 编写一个简单的C++或Python程序读取摄像头 方法二:使用ROS(需要ROS环境) 1. 安装ROS(如果已有) 2. 安装usb_cam包 3. 运行launch文件调用摄像头 根据引用[4],我们可以给出OpenCV的示例代码(C++和Python)。 根据引用[1][2][3],我们可以给出ROS下的操作步骤。 由于用户使用的是Ubuntu 18.04,我们假设默认安装的是ROS Melodic。 我们按照以下结构回答: 1. 检查摄像头是否被系统识别(通用步骤) 2. 方法一:使用OpenCV 3. 方法二:使用ROS(如果用户有ROS环境) 同时,考虑到用户可能没有安装OpenCV或ROS,我们将给出安装步骤。 注意:引用[1]提到虚拟机使用摄像头需要将USB兼容性修改至USB3.1,如果是虚拟机用户需要注意。但用户没有说明是虚拟机还是物理机,我们可以提一下。 开始回答:</think>在 Ubuntu 18.04 系统中调用笔记本摄像头有两种主流方法:使用 OpenCV 直接访问摄像头或通过 ROS 框架调用。以下是详细操作指南: --- ### 一、基础检查:确认摄像头可用性 1. **检查设备识别** 终端执行: ```bash ls /dev/video* # 查看摄像头设备,通常为 /dev/video0 ``` 若未显示设备,尝试: ```bash sudo apt install cheese # 安装测试工具 cheese # 启动摄像头测试 ``` 2. **虚拟机用户注意**(如适用) - 在 VMware/VirtualBox 中: ```设置 → USB设备 → 启用摄像头并选择USB 3.1兼容性```[^1] --- ### 二、方法一:使用 OpenCV 直接调用(推荐) #### 步骤 1:安装 OpenCV ```bash sudo apt update sudo apt install python3-opencv # Python 版本 # 或安装 C++ 支持 sudo apt install libopencv-dev ``` #### 步骤 2:编写摄像头调用程序 - **Python 示例**(保存为 `camera.py`): ```python import cv2 cap = cv2.VideoCapture(0) # 0 表示默认摄像头 while True: ret, frame = cap.read() if not ret: print("摄像头读取失败") break cv2.imshow('Live', frame) if cv2.waitKey(1) == ord('q'): # 按 q 退出 break cap.release() cv2.destroyAllWindows() ``` - **C++ 示例**(保存为 `camera.cpp`): ```cpp #include <opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture cap(0); if (!cap.isOpened()) return 1; Mat frame; while (true) { cap >> frame; imshow("Live", frame); if (waitKey(1) == 'q') break; } return 0; } ``` 编译命令: ```bash g++ camera.cpp -o camera `pkg-config --cflags --libs opencv` ``` #### 步骤 3:运行程序 ```bash python3 camera.py # Python ./camera # C++ ``` --- ### 三、方法二:通过 ROS 调用(需 ROS 环境) #### 步骤 1:安装 ROS 和 usb_cam 包 ```bash sudo apt install ros-melodic-ros-base # 安装 ROS Melodic sudo apt install ros-melodic-usb-cam # 安装摄像头驱动包 ``` #### 步骤 2:启动摄像头节点 ```bash roslaunch usb_cam usb_cam-test.launch # 启动摄像头[^1][^3] ``` - 验证图像流: ```bash rostopic echo /usb_cam/image_raw # 查看原始图像数据 ``` - **可视化图像**: ```bash rosrun image_view image_view image:=/usb_cam/image_raw ``` #### 步骤 3:摄像头标定(可选) ```bash rosrun camera_calibration cameracalibrator.py \ --size 8x6 \ # 棋盘格内角点数 --square 0.108 \ # 方格边长(米) image:=/usb_cam/image_raw \ camera:=/usb_cam ``` 按提示移动棋盘格完成标定[^2][^3]。 --- ### 四、常见问题解决 1. **摄像头无法打开**: - 检查设备权限: ```bash ls -l /dev/video0 # 查看权限 sudo chmod 666 /dev/video0 # 临时授权 ``` - 永久解决权限问题: ```bash sudo usermod -a -G video $USER # 将用户加入video组 ``` 2. **图像卡顿/花屏**: - 降低分辨率(在 ROS 的 launch 文件中修改): ```xml <param name="image_width" value="640"/> <param name="image_height" value="480"/> ``` 3. **虚拟机延迟高**: - 优先使用物理机方案 - 在虚拟机设置中分配更多 CPU 资源 --- ### 五、方案对比 | **方法** | 适用场景 | 复杂度 | 实时性 | |----------------|----------------------------|--------|--------| | OpenCV 直接调用 | 快速测试、非ROS项目 | ★★☆ || | ROS 驱动 | 机器人开发、需要标定/多节点 | ★★★ | 中等 | > 建议:基础使用选 OpenCV 方案;涉及机器人/SLAM 等选 ROS 方案。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值