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

news/2024/9/18 14:48:14/ 标签: 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 创建的窗口。

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

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


http://www.ppmy.cn/news/1517110.html

相关文章

百日筑基第六十天-学习一下Tomcat

百日筑基第六十天-学习一下Tomcat 一、Tomcat 顶层架构 Tomcat 中最顶层的容器是 Server,代表着整个服务器,从上图中可以看出,一个 Server可以包含至少一个 Service,用于具体提供服务。Service 主要包含两个部分:Conn…

Flask SQLALchemy 的使用

Flask SQLALchemy 的使用 安装 Flask-SQLAlchemy配置 Flask-SQLAlchemy定义模型创建数据库和表插入和查询数据更新和删除数据迁移数据库总结Flask-SQLAlchemy 是一个 Flask 扩展,它简化了 Flask 应用中 SQLAlchemy 的使用。SQLAlchemy 是一个强大的 SQL 工具包和对象关系映射(…

【AI智能体】在AI浪潮中,程序员如何在这复杂的环境中生存下去

在这个瞬息万变的时代,人工智能(AI)如同一阵狂风,席卷了各行各业,尤其是程序员这一群体。面对AI的迅猛发展,程序员们不仅要适应新的技术潮流,更要在这场变革中找到自己的立足之地。如何在AI浪潮…

Shader笔记:光照与阴影1

引:旋转动画(三角函数) float3 rotationY(float3 vertex){float c cos(_Time.y*_Speed);float s sin(_Time.y*_Speed);float3x3 m {c,0,s,0,1,0,-s,0,c};return mul(m,vertex); } v2f vert (a2v v) {v2f o;o.pos UnityObjectToClipPos(r…

Charles苹果手机https抓包

1、电脑设置Charles代理端口 1)设置代理端口 Proxy-》Proxying Settings-》HTTP Proxy 设置端口 2)设置监控的代理地址 Proxy-》SSL Proxying Settings 添加Add允许所有地址*.* 2、电脑导入Charles的ssl证书 3、电脑查看Charles的IP地址和端口 4、手机无线wifi配置代理 5、手…

Vue3常见知识**MS【4】

一、vue2和vue3的区别 1、数据绑定原理不同 vue2:数据绑定是利用ES5的一个API:Object.definePropert() 对数据进行劫持,结合发布订阅模式的方式来实现的。 vue3:使用了ES6的Proxy API对数据代理。相比vue2.x,使用proxy…

【Java设计模式】Builder模式:在Java中清晰构建自定义对象

文章目录 【Java设计模式】Builder模式:在Java中清晰构建自定义对象一、概述二、Builder设计模式的意图三、Builder模式的详细解释及实际示例四、Java中Builder模式的编程示例五、Builder模式类图六、Java中何时使用Builder模式七、Builder模式Java教程八、Builder模…

【Linux篇】Linux的压缩与解压

1. 压缩格式 市面上有非常多的压缩格式: zip格式:Linux,win,MacOS,常用7zip:win常用rar:win常用tar:Linux,MacOS常用gzip:Linux,MacOS常用 如何…

C++_ch07_visual studio调试代码

C_ch07_visual studio调试代码 1.1 Break Point 断点就是程序执行到这里就会暂停,一个程序可以设置很多短点。在visual studio中只需要点击侧栏就可以设置断点。 点击左边的栏目,出现红点就是设置的断点。 另外要确保打断点的位置必须是可执行的代码&…

WordPress美化节日灯笼插件,适合春节的时候使用

源码介绍: WordPress美化节日灯笼插件,适合每年过年的时候安在网站上使用,这款插件可以备用着,一款WordPress节日灯笼美化插件,可以给网页自动加一个灯笼效果使用说明:到网站WP后台 - 插件 - 安装插件 - 上…

【学术会议征稿】第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024)

第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024) 2024 6th International Conference on Intelligent Control, Measurement and Signal Processing 文化是人类社会相对于经济和政治的精神活动和产物。传统的人类观念认为,文化是一种社会现象&#xff0…

CDGA|数据治理:统一数据标准成为核心关切

在数字化转型浪潮席卷全球的今天,数据已成为企业最宝贵的资产之一,其价值不言而喻。然而,随着数据量呈爆炸式增长,数据来源多样化、格式不一、质量参差不齐等问题日益凸显,给企业的数据管理和利用带来了前所未有的挑战…

C语言基础(二十)

链表是一种常见的数据结构,通常用来存储一系列元素,每个元素由一个节点来表示。在链表中,每个节点包含两部分:数据元素本身和指向下一个节点的指针。这种结构使得链表中的元素在内存中不是连续存储的,而是通过指针连接…

电商支付异常处理分享

时间:2024年08月28日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频地址:https://xima.tv/1_1qSvgv?_sonic0 希望大家帮个忙!如果大家有工作机会,希望帮小蒋内推一下&#x…

Spring Boot如何压缩Json并写入redis?

1.为什么需要压缩json? 由于业务需要,存入redis中的缓存数据过大,占用了10G的内存,内存作为重要资源,需要优化一下大对象缓存,采用gzip压缩存储,可以将 redis 的 kv 对大小缩小大约 7-8 倍&…

如何考取PostgreSQL认证证书?

PostgreSQL数据库炙手可热,国内知名的腾讯云TDSQL、阿里云PolarDB都有PostgreSQL版本的产品,还有人大金仓、华为opengauss、翰高数据库等都跟PostgreSQL有关系,所以考一个PostgreSQL认证非常有必要。要获得PostgreSQL认证,可以从以…

PTA - C语言国庆题集1

目录 7-1 阶梯电价7-2 求矩阵的最大值(设惟一)7-3 换硬币(鸡兔同笼)7-4 逆序输出一个整数的各位数字7-5 交换最小值7-6 分段函数27-7 数组中能被5整除的数的和7-8 统计字母出现的次数(hash思想)7-9 字母三角…

openEluer安装软件提示系统缺少的一些库的解决

mysql客户端相关的坑 问题:mysql: error while loading shared libraries: libncurses.so.5 解决: ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5 问题:mysql: error while loading shared libraries: libtinfo.so.5 解决…

npm阿里云制品仓库

配置 配置仓库地址,可以再在仓库指南看到 npm config set registryxxxxx#登录,帐户密码可以在仓库指南看到 npm login注意:npm>9的版本npm login目前有问题 verbose web login not supported, trying couch,暂时没试验到解决…

数据结构-递归算法-第四天

参考文献: 华为云 博客园 labuladong 的算法笔记 递归是一种编程技巧,一种解决问题的思维方式;分治算法和动态规划很大程度上是递归思想基础上的(虽然动态规划的最终版本大都不是递归了,但解题思想还是离不开递归&…