若楠带你初识OpenCV(1)-- 视频、图片基础处理,颜色获取

文章目录

  • OpenCV
    • 一、核心功能
    • 二、初识OpenCV
      • 1. 安装OpenCV
      • 2. 读取图片
      • 3. 读取灰度图
      • 4. 图片保存
      • 5. 视频文件读取
      • 6. 区域截取
      • 7. 提取RGB通道颜色
      • 8. 合并颜色通道
  • 总结

OpenCV

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它主要用于实时图像处理和计算机视觉任务。

一、核心功能

OpenCV提供了丰富的功能,包括但不限于以下几个方面:

  1. 图像处理:包括图像加载、保存、调整大小、旋转、裁剪、滤波、边缘检测等。OpenCV提供了多种图像滤波器,如模糊、高斯模糊、Canny边缘检测器等。
  2. 物体检测与跟踪:OpenCV提供了多种目标检测和跟踪算法,如Haar级联检测器、HOG特征检测器、卡尔曼滤波器等,这些算法可以用于人脸检测、行人检测、车牌识别等应用。
  3. 特征提取与匹配:包括角点检测、描述符提取、特征匹配等,这些功能有助于从图像中提取关键信息并进行比较和分析。
  4. 机器学习:OpenCV集成了分类、聚类、回归等机器学习算法,可以方便地进行模式识别和数据挖掘。
  5. 深度学习:OpenCV提供了与主流深度学习框架(如TensorFlow、PyTorch)的集成接口,支持神经网络模型的训练和推断。
  6. 视频分析:包括视频捕捉、视频处理、目标跟踪、视频稳定等功能,适用于监控和安全等应用。

二、初识OpenCV

本篇所用数据:
链接: <数据>
提取码: dzvx

1. 安装OpenCV

pip install opencv

2. 读取图片

import cv2
a = cv2.imread('GGbond.jpg') #读取图片信息,返回三维数组
cv2.imshow('pig',a) #显示图片
b = cv2.waitKey(10000) #图片显示等待时间
print(b)	#返回关闭图片时,点击的按钮对应的ACCII码值
cv2.destroyAllWindows()	#关闭所有窗口print("图片形状:",a.shape)
print("图片数据类型:",a.dtype)
print("图片大小:",a.size)
---------------------------
27
图片形状: (1070, 1080, 3)
图片数据类型: uint8
图片大小: 3466800

在这里插入图片描述

3. 读取灰度图

将彩色图片转化为灰度图

b = cv2.imread('GGbond.jpg',cv2.IMREAD_GRAYSCALE) #或者将cv2.IMREAD_GRAYSCALE用0代替,也可以加载灰度图
print(b)
cv2.imshow('pig_gary',b) #展示图片,可以给展示的图片命名
a = cv2.waitKey(0)	#cv2.waitKey设置参数为0时,表示图片一直展示,知道主动关闭
cv2.destroyAllWindows()print("图片形状:",b.shape)
print("图片数据类型:",b.dtype)
print("图片大小:",b.size)
---------------------
[[230 235 240 ... 239 239 239][230 235 240 ... 240 239 239][230 235 240 ... 240 240 240]...[227 231 236 ... 240 240 240][227 231 236 ... 240 240 240][227 231 236 ... 240 240 240]]
图片形状: (1070, 1080)
图片数据类型: uint8
图片大小: 1155600

在这里插入图片描述

4. 图片保存

#图片保存
cv2.imwrite('GGbond_gary.jpg',b)

在这里插入图片描述

5. 视频文件读取

此处注意哦,视频的读取实则本质上是读取视频中每一帧的图片,通过将下一张图片覆盖上一张,形成视频的效果:

#打开视频文件
video_capture = cv2.VideoCapture('video.mp4') #仅输入参数0,可以打开摄像头if not video_capture.isOpened():print("无法打开视频文件")exit()#每次读取的都是一帧画面,通过循环,将下一帧的画面覆盖上一个画面,形成视频效果
while True:ret,frame = video_capture.read() #读取每一帧画面if not ret:breaknew_frame = cv2.resize(frame,dsize=None,fx=0.5,fy=0.5) #改变视频显示大小new_frame = cv2.cvtColor(new_frame,cv2.COLOR_BGR2GRAY) #将每一帧转化为灰度图cv2.imshow('Video',new_frame) #展示每一帧的画面if cv2.waitKey(30) == 27: #按下esc键,结束循环break#释放资源:每次读取视频时,每一帧画面占据内存,及时释放清理
video_capture.release()
cv2.destroyAllWindows()

6. 区域截取

截取指定区域的图片:

a = cv2.imread('GGbond.jpg')
b = a[300:800,300:800]	#【垂直方向多少行,水平方向多少列】
cv2.imshow('yuantu',a)
cv2.imshow('qiepian',b)
cv2.waitKey(10000)
cv2.destroyAllWindows()

在这里插入图片描述

7. 提取RGB通道颜色

特别注意!!!opencv在处理图片时,颜色顺序为BGR!!

我们知道,在读取一个图片时,返回的是一个三位数组,而其中的第三个通道代表的就是颜色,所以我们获取RGB时,可通过一下方法获取:

#opencv处理颜色数据顺序为BGR
a = cv2.imread('GGbond.jpg')#提取颜色通道
a1 = a[:,:,0] #提取B通道
a2 = a[:,:,1] #提取G通道
a3 = a[:,:,2] #提取R通道

或者通过split方法分离颜色通道:

#或通过split方法分离颜色通道
b,g,r = cv2.split(a)

提取通道后我们来看看提取后的图片,以蓝色为例:

cv2.imshow('result',b) #展示蓝色通道
#但是显示结果时,显示的是灰度图,因为其它两个通道默认值为255,所以需要手动调整值
cv2.waitKey(10000)
cv2.destroyAllWindows()

在这里插入图片描述

我们发现,显示的是灰度图,因为其它两个通道默认值为255,所以需要手动调整值:

手动调整通道颜色

#调整通道颜色的值
a_new = a.copy() #复制一个图片,不在原图上操作#将G,R通道的颜色值,调整为0
a_new[:,:,1] = 0
a_new[:,:,2] = 0cv2.imshow('result_1',a_new)
cv2.waitKey(10000)
cv2.destroyAllWindows()

在这里插入图片描述

8. 合并颜色通道

我们知道,图片是由一个个像素点组成的,通过每个像素点颜色的不同,凸显形成一个有形状的图片,所以,我们将颜色拼接,即可得到我们想要的图片,使用merge()函数合并:

a = cv2.imread('GGbond.jpg')#提取颜色通道
a1 = a[:,:,0]
a2 = a[:,:,1]
a3 = a[:,:,2]
#或
b,g,r = cv2.split(a)#使用merge()函数将三个通道合并成一个图像
img = cv2.merge((b,g,r))
cv2.imshow('result',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()

在这里插入图片描述

总结

本篇介绍了:

  1. OpenCV的功能作用
  2. opencv的部分基本作用:读取图片、读取灰度图、图片保存、视频文件读取、区域截取、提取RGB通道颜色、合并颜色通道
  3. 发现了嘛? 我们本篇学习用的图片很大,怎么将它缩小一点呐?改变它的形状,我们下篇再见哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/415582.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MES 系统中工艺管理--工艺指令管理

一.生产系统柔性&#xff0c;高复用性需求。 工艺路线---------生产线 工序------工位 工艺指令-----具体工步 二.工艺指令分类 1、工艺要求支持配置指令、站点后在过点时&#xff0c;自动调用指令执行。物料、工步、人员作为预留设置&#xff1b; 2、指令主要分ABCD四类&…

Git基础教程:掌握版本控制的秘密

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;C从入门到精通 目录 &#x1f680; 什么是Git &#x1f680; 在本系列博客中所实现的目标 一&#xff1a; &#x1f525; Git 初识 二&#xff1a; &#x1f525; Git 安装 &#x1f34a; Linux-c…

GAMES202——作业4 Kulla-Conty BRDF(BRDF的预计算、重要性采样)

目录 任务 实现 预计算E() 预计算Eavg Bonus1&#xff1a;重要性采样 在实时渲染中使用预计算数据 结果 任务 完成 Kulla-Conty BRDF 模型&#xff0c;关键在于计算 BRDF 的补偿项 f ms &#xff0c;而 f ms 的计算需要 E ( ) 和 E avg 两个前置变量。 1.预计算E() …

【pgAdmin4】创建/删除:数据库Database和数据库表Table

目录 0.环境 1.简介 2.详细步骤 1&#xff09;创建数据库 法一&#xff1a;UI界面创建 法二&#xff1a;sql语句创建数据库 2&#xff09;创建数据库表 查看数据库表 查看数据库表内容 法一&#xff1a;UI界面创建数据库表 法二&#xff1a;sql语句创建数据库表 3&…

快专利与慢专利:速度与质量的天平

在当今快速发展的科技时代&#xff0c;专利成为了创新成果的重要保护手段。然而&#xff0c;不同的创新有着不同的节奏&#xff0c;由此也产生了“快专利”与“慢专利”之分。快专利以其迅速的申请和应用&#xff0c;为创新者抢占市场先机&#xff1b;慢专利则凭借深度的研发和…

【Redis之一:下载安装Redis】

Redis下载与安装 一、下载 Redis 安装包1、 Windows 安装包下载 二、安装Redis1、 Windows 安装Redis 三、配置 Redis1、 Windows 中配置 Redis&#xff08;1&#xff09;配置访问密码&#xff08;2&#xff09;重启 Redis 服务 三、访问 Redis1、命令行访问 Redis&#xff08;…

【福利】最新可用!谷歌搜索和谷歌学术的镜像网站

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 内容来自&#xff1a;https://www.80srz.com/posts/1633.html 谷歌搜索镜像 Google搜索镜像1&#xff1a;https://g.savalone.com/ Google搜索镜像2&…

Python基础笔记

一、python基础1.1 基础知识1.1.1 注释 注释&#xff1a;在程序中对程序代码进行解释说明的文字。 作用&#xff1a;注释不是程序&#xff0c;不能被执行&#xff0c;只是对程序代码进行解释说明&#xff0c;让别人可以看懂程序代码的作用&#xff0c;能够大大增强程序的可读性…

LabVIEW电机多次调用

在LabVIEW中&#xff0c;为实现对多个电机的独立控制&#xff0c;工程师可以采用可重入VI、动态VI调用、多任务结构或面向对象编程等方法。每种方法都有其优点和适用场景&#xff0c;选择合适的方法能有效提升系统的性能和可维护性。 在LabVIEW中&#xff0c;如果需要多次调用…

遥控器显示分别对应的无人机状态详解!!

1. 电量显示 遥控器电量&#xff1a;遥控器上通常会显示自身的电池电量&#xff0c;以提醒用户及时充电。 无人机电量&#xff1a;部分高端遥控器还会显示无人机的电池电量&#xff0c;以进度条或百分比的形式表示&#xff0c;帮助用户了解无人机的续航能力。 2. 飞行模式与…

Mybatis框架——缓存(一级缓存,二级缓存)

本章将简单介绍Mybatis框架中的缓存&#xff0c;欢迎大家点赞➕收藏&#xff0c;蟹蟹&#xff01;&#xff01;&#xff01;&#x1f495; &#x1f308;个人主页&#xff1a;404_NOT_FOUND &#x1f308;MyBatis环境搭建步骤&#xff08;超全解析&#xff01;&#xff01;&am…

hackme靶机攻略

1.通过nmap扫描靶场ip 2.目录扫描 3.找出文件存储位置&#xff0c;看看哪里可以上传文件 4.注册账号登录一下 点击search 5.输入1 and 11 -- 1 and 12 --看看有无SQL注入 6.判断字段数 1 order by 3 -- 说明字段数是3 7.查看数据库 -1 union select database(),2,3 # 8.查…

【Linux】使用Linux实现小程序 - 进度条

目录 一、缓冲区二、回车换行的概念三、进度条的设计3.1 版本1&#xff08;没有配合场景&#xff09;3.2 版本2&#xff08;配合场景&#xff09;3.3 版本3&#xff08;美化进度条&#xff09; 结尾 一、缓冲区 C/C语言&#xff0c;会针对标准输出&#xff0c;给我们提供默认的…

Python数据分析实战,兰州市二手房市场深度分析

作为购房者&#xff0c;除了关注地段与价格外&#xff0c;房屋的总价与面积的关系&#xff0c;以及房屋朝向的选择&#xff0c;同样是决策过程中的关键因素。那么&#xff0c;兰州市的二手房市场中&#xff0c;房屋总价与面积之间究竟存在怎样的关系&#xff1f;各个朝向的房源…

day-48 分割回文串

思路 利用dfs算法&#xff0c;用ids表示当前所指向字符的位置&#xff0c;依次判断s.charAt(ids),s.charAt(ids)s.charAt(ids1)…是否为回文字符串&#xff0c;如果是则加入链表p,再递归调用dfs函数 解题过程 每次调用dfs函数后记得还原现场 Code class Solution {public St…

宝藏!《联盟自控基础班筑基题库》(凤凰篇) 1-8章:甄选部分

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;初试《自控基础班筑基题库》(凤凰篇)。 Part1&#xff1a;资料封面&目录 Part2&#xff1a;资料各个章节具体内容 第1章 自动控制的基本概念 第2章 控制系统的数学模型 第3章 控制系统的时域分析 第4章 根轨迹法…

探索ArrayList的线程不安全性

文章目录 概要示例代码原因解决用 synchronized 保证安全添加元素其他方法 总结 概要 要测试ArrayList的线程不安全性&#xff0c;可以创建多个线程同时对 ArrayList 进行修改操作&#xff08;如添加、删除元素&#xff09;&#xff0c;并观察是否会引发异常或数据不一致的问题…

unity游戏开发——标记物体 一目了然

Unity游戏开发:标记物体,让开发变得一目了然 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发:标记物体,让开发变得一目了然前言1. 什么是Tag&#xff1f;2. Unity中如何添加和管理Tag步骤1&am…

微电网管理系统

微电网管理系统 1. 相关概念简介 基本概念及分析意义&#xff1a; 微电网基本概念&#xff1a;微电网&#xff08;MG&#xff09;由分布式电源、用电负荷、能量管理系统等组成&#xff0c;是一个能够基本实现内部电力电量平衡的供用电系统。 通过整合分布式电源、储能、负荷…

阿里巴巴数学竞赛成绩未公布:背后的权衡与期待

文 | 头部财经首席评论员白立新 发布 | 头部财经 top168.com 导语&#xff1a;2024 年阿里巴巴数学竞赛成绩迟未公布&#xff0c;引发广泛猜测。中专生姜萍的表现备受瞩目&#xff0c;达摩院陷入两难困境。这场竞赛结果的公布&#xff0c;关乎多方利益与社会影响&#xff0c;…