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

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

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

一.读取图片

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

import cv2
import numpy as np
import matplotlib.pyplot as pltgirl = 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 创建的窗口。

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 探索贪心算法:解决优化问题的高效策略
  • selenium(二)基于java、元素操控、Frame切换、元素等待
  • 【Go语言基础】调度器模型GPM与垃圾回收器GC
  • GNU/Linux - RSYSLOG
  • 基于大数据分析景区消费行为影响因素研究【消费等级预测、携程,去哪网数据抓取】
  • 去雾去雨算法
  • 力扣top300:1.两数之和
  • 37-RPC HTTP区别是什么
  • 用于目标说话人提取的统一视听线索
  • CSS3 3D 转换
  • GPT-6曝光!阉割版「草莓」秋季兑现
  • qtcreator的vim模式下commit快捷键ctrl+g,ctrl+c没有反应的问题
  • labelImg使用
  • 基于网络技术的天气数据查询
  • 在 Spring Boot 中为 MyBatis 添加拦截器
  • 深入了解以太坊
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【mysql】环境安装、服务启动、密码设置
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JavaScript异步流程控制的前世今生
  • JAVA之继承和多态
  • jquery cookie
  • sessionStorage和localStorage
  • 产品三维模型在线预览
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 猴子数据域名防封接口降低小说被封的风险
  • 如何解决微信端直接跳WAP端
  • 如何选择开源的机器学习框架?
  • 如何在GitHub上创建个人博客
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一个JAVA程序员成长之路分享
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 第二十章:异步和文件I/O.(二十三)
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (第二周)效能测试
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)计算机毕业设计ssm电影分享网站
  • (转) Android中ViewStub组件使用
  • (转)菜鸟学数据库(三)——存储过程
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net Core 生成管理员权限的应用程序
  • .NET DataGridView数据绑定说明
  • .Net Remoting常用部署结构
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 使用 XPath 来读写 XML 文件
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net专家(张羿专栏)
  • //TODO 注释的作用
  • ?php echo ?,?php echo Hello world!;?
  • @RequestBody的使用