当前位置: 首页 > article >正文

OpenCV(第二关--读取图片和摄像头)实例+代码

以下内容,皆为原创,制作不易,感谢大家的关注和点赞。

一.读取图片

        我们来读取图片,当你用代码读取后,可能会发现。怎么跟上传的图片颜色有些许的不一样。因为OpenCV的颜色通道是BGR,而我们平常用的matplotlib是RGB颜色通道。多少有差异。

import cv2
import numpy as np
import matplotlib.pyplot as plt

girl = cv2.imread("C:/Users/19159/Pictures/Camera Roll/11.png")
# matplotlib显示的图片与现实的图片不一样,因为opencv读进来的图片数据通道不是默认的RGB
# 而是BGR(蓝绿红灯)
plt.imshow(girl)

   给大家看一下,OpenCV读取后的图片是什么样子的,再对比原图片。以下第一个是读取后的。

  咳咳,抛开图片不谈,其实OpenCV还是有些区别于matplotlib。

 

二.读取摄像头

        这个部分还是挺好玩的,可以控制自己电脑的摄像头实时显示自己帅气的脸庞。

        

import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

# 检查摄像头是否成功打开
if not cap.isOpened():
    print("无法打开摄像头")
    exit()

cv2.namedWindow('video', cv2.WINDOW_NORMAL)
cv2.resizeWindow('video', 640, 480)

# 循环读取摄像头的每一帧
while True:
    # 读一帧数据
    ret, frame = cap.read()

    # 根据ret做判断
    if not ret:
        print("无法读取摄像头数据")
        break
    
    # 显示数据
    cv2.imshow('video', frame)

    # 设置较短的等待时间,以便视频帧可以快速更新
    key = cv2.waitKey(1) & 0xFF  # 1毫秒等待时间

    if key == ord('q'):
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

使用了 OpenCV 库(cv2模块),主要用于从摄像头捕获视频流,并在窗口中实时显示。下面是代码的逐行分析:

  1. import cv2:导入 OpenCV 库,这是处理图像和视频的基本库。

  2. cap = cv2.VideoCapture(0):创建一个 VideoCapture 对象,0 表示默认的摄像头设备。如果计算机有多个摄像头,可以通过更改数字来选择不同的摄像头。

  3. if not cap.isOpened()::检查摄像头是否成功打开。如果未成功,将打印错误消息并退出程序。

  4. cv2.namedWindow('video', cv2.WINDOW_NORMAL):创建一个窗口,用于显示视频流。cv2.WINDOW_NORMAL 表示窗口可以被调整大小。

  5. cv2.resizeWindow('video', 640, 480):设置窗口的大小为 640x480 像素。

  6. while True::开始一个无限循环,用于连续读取视频帧。

  7. ret, frame = cap.read():从摄像头读取一帧图像。ret 是一个布尔值,如果读取成功则为 Trueframe 是读取到的图像帧。

  8. if not ret::如果 retFalse,表示无法读取摄像头数据,打印错误消息并退出循环。

  9. cv2.imshow('video', frame):将读取到的帧显示在之前创建的窗口中。

  10. key = cv2.waitKey(1) & 0xFF:等待键盘输入,1 表示等待时间为 1 毫秒。& 0xFF 是为了确保获取的按键值在正确的范围内。

  11. if key == ord('q')::如果按下 'q' 键,则退出循环,停止视频捕获。

  12. break:退出循环。

  13. cap.release():释放 VideoCapture 对象,释放与摄像头相关的资源。

  14. cv2.destroyAllWindows():销毁所有由 OpenCV 创建的窗口。

 创建窗口后,窗口会读取你的摄像头,并实时显示画面,我社恐,就用花露水的贴纸挡一下我。

好了,今天的分享就到这里,感谢大家的关注和点赞。 


http://www.kler.cn/a/279913.html

相关文章:

  • CDGA|如何有效管理和利用数据成为了企业面临的一大挑战
  • 机器学习之标量和向量的定义
  • bypass disable_function绕过
  • MATLAB 低版本Matlab-读取LAS格式点云文件并可视化(78)
  • 左连接、右连接、自连接、内连接、全连接、NUION操作符
  • Java笔试面试题AI答之面向对象(5)
  • 设计模式设计原则
  • 【C#】【EXCEL】Bumblebee/Classes/ExRange.cs
  • 【STM32】PWR电源控制(低功耗模式)
  • 谷歌浏览器 Google Chrome 禁止扩展.crx更新
  • 【详细】mysql常用命令行大全,优雅的在命令提示符(CMD)中使用mysql 命令。
  • echarts组件——条形统计图
  • PHP概述-特点-应用领域-如何学习
  • PowerShell自动化Windows系统管理任务
  • ubuntu 20.04系统安装pytorch
  • Linux—互斥锁
  • 云原生周刊:KubeSphere 宣布开源 Thanos 的企业级发行版 Whizard
  • 深入解析SSRF和Redis未授权访问
  • 深度学习100问3-什么是共现矩阵及其作用
  • 华为Huawei路由器交换机SSH配置