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

news2024/11/26 6:21:58

文章目录

  • 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:
        break

    new_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] = 0

cv2.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.coloradmin.cn/o/2100516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL【2】稍稍进阶

目录 首先&#xff0c;怎么安装&#xff0c;环境怎么调。 alter——改变&#xff08;此段Al&#xff09; 创建于删除数据库、表格 上一节进阶 预设值default​编辑 关于插入顺序 有条件的删除DELETE FROM 表 WHERE 条件 多种语句组合查看 查看排序​编辑 LIMIT 2只取前…

输煤皮带智能巡检机器人技术方案及应用分析

输煤皮带是电厂和工业企业物料输送系统的重要组成部分。由于皮带系统通常覆盖面积大、环境复杂&#xff0c;传统的人工巡检方式存在效率低、危险性高等问题。为此&#xff0c;智能巡检机器人被引入输煤皮带系统&#xff0c;旨在实现无人化、智能化的巡检作业&#xff0c;提升系…

如何禁用USB存储设备|禁用USB储存和连接手机的方法有哪些?深度解析,四招搞定!

在企业网络安全管理中&#xff0c;禁用USB存储设备和限制手机连接至关重要。这不仅可以防止数据泄露&#xff0c;还能阻止恶意软件通过外部设备入侵。 本文将为你推荐四种行之有效的方法&#xff0c;帮助你全面禁用USB存储设备和连接手机的功能&#xff0c;让企业数据安全更有…

google浏览器禁止http自动转https

在Chrome的地址栏中输入 chrome://flags&#xff0c;搜索“HTTPS Upgrades”并将其设置为“Disabled”。这将禁用Chrome自动将HTTP升级到HTTPS的功能。

分享5款在不同场景提供支持的软件

​ 本文将介绍几款实用的软件工具&#xff0c;涵盖了从文件管理到系统优化&#xff0c;以及跨平台操作等多个领域。 1. 静态分析工具——Cerbero Suite Advanced ​ Cerbero Suite Advanced是一款功能强大的静态分析工具&#xff0c;专为逆向工程和数字取证设计。它支持多种文…

迪杰斯特拉算法——求最短路径

朴素版本&#xff08;时间复杂度O&#xff08;n^2&#xff09;&#xff09;&#xff1a; 迪杰斯特拉算法采用的是一种贪心的策略。 用一个 dist 数组保存源点到其余各个节点的距离&#xff0c;dist[i] 表示源点到节点 i 的距离。初始时&#xff0c;dist 数组的各个元素为无…

Nginx 部署前端 Vue 项目实战指南

一、环境准备 1. 安装 Nginx 首先&#xff0c;需要在服务器上安装 Nginx。Nginx 是一款轻量级、高性能的 HTTP 和反向代理服务器。安装方式因操作系统而异。 Linux 系统&#xff08;以 Ubuntu 为例&#xff09;&#xff1a; sudo apt-get update sudo apt-get install nginxWi…

MacOS下WKWebView设置背景透明问题

业务场景需要设置WKWebView的背景内容透明&#xff0c;查询到一般有两种方法&#xff1a; [self.webView setValue: NO forKey: "drawsBackground"]; [self.webView setValue:[NSNumber numberWithBool: YES] forKey:"drawsTransparentBackground"]; 这…

ZBrush入门使用介绍——13、Dynamesh

大家好&#xff0c;我是阿赵。   继续介绍ZBrush的用法。这次介绍一个可以给模型重新布线和生成形状的工具&#xff0c;叫做Dynamesh。 1、 重新布线 在使用Move笔刷的时候&#xff0c;经常会遇到一个问题 当用Move笔刷把模型拖拽出一个形状的时候&#xff0c;被拖出来的部…

ElasticSearch-倒排索引 文档映射

倒排索引文档映射 已有字段的Mapping修改常用Mapping参数配置Index TemplateDynamic Template 倒排索引 当数据写入 ES 时&#xff0c;数据将会通过 分词 被切分为不同的 term&#xff0c;ES 将 term 与其对应的文档列表建立一种映射关系&#xff0c;这种结构就是 倒排索引 为…

火车票、高铁票如何开具电子发票?12306怎么查询报销凭证是否领取?

火车票、高铁票如何开具电子发票&#xff1f; 众所周知&#xff0c;目前很多消费&#xff08;衣食住行&#xff09;报销都是可以开具电子发票的&#xff0c;但火车票目前无法开具电子发票。 火车票目前只有纸质报销凭证&#xff0c;报销凭证与之前的车票类似&#xff0c;但是…

数学建模常用工具总结

数学建模常用工具总结 绘图篇pythonMATLABLIVEGAP CHARTSApache EChartsBioLadderHiplot Pro 生物医学可视化平台Graph EditorRAWGraphs 2.0ExcalidrawPPT绘图 配色篇Color SpaceAdobe Color 素材篇手绘素材插画网iconfont-阿里巴巴矢量图标库下面四个都是实物风格的素材&#…

40天的八股文总结

四十天前报名参加了卡哥的八股文训练营&#xff0c;在这四十天中每周都在训练营中打卡&#xff0c;可以通过念出来的方式进行八股文的记忆&#xff0c;同时还可以听到其他训练营中的朋友们的打卡&#xff0c;这让人感觉非常的有动力&#xff0c;每天都有更强烈的记忆八股文的信…

安装win7鼠标键盘不能动原因分析及解决办法

有同学反馈安装win7鼠标键盘不能动这是怎么回事&#xff1f;后来研究该问题主要是原版win7没有集成usb3.0和usb3.1驱动导致&#xff0c;下面小编就教大家安装win7鼠标键盘不能动原因分析及解决方法。 安装win7鼠标键盘不能动原因分析&#xff1a; 原因&#xff1a;研究后发现是…

Quartz.Net_快速开始

简述 Quartz中主要分为三部分&#xff0c;JobDetail、Trigger、Scheduler&#xff0c;分别是任务、触发器、调度器&#xff0c;三者的关系为&#xff1a;Trigger控制JobDetail的执行时间和频率&#xff0c;而Scheduler负责将具体的Trigger与具体的JobDetail绑定 1.安装Quartz…

无需后端也能测试 CRUD:Mock.js 的强大功能

前言 在前端开发中&#xff0c;数据的增删改查&#xff08;CRUD&#xff09;操作是最常见的需求之一。 然而&#xff0c;在后端接口尚未就绪的情况下&#xff0c;前端开发者往往需要一种方法来模拟这些操作。 Mock.js 作为一个强大的前端数据模拟库&#xff0c;可以帮助开发…

Ubuntu 上启用 swap 内存,提高运行效率!

Ubuntu 24.04 是一个功能强大的操作系统&#xff0c;但有时你的电脑可能会在运行多个应用程序时耗尽内存。这会降低系统的运行速度和效率。在这种情况下&#xff0c;添加交换内存会有所帮助。交换内存作为一个额外的内存资源&#xff0c;您的计算机可以顺利处理更多的任务。 在…

如何用一次推送,毁掉一个公司?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;可以私有化部署&#xff0c;对中文的支持非常友好&#xff0c;是专为中国程序员和企业推出的企业级一体化 DevOps 平台&#xff0c;一键就能安装成功。安装详情可以查看官网指南。 本文分享如何使用极狐GitLab 17.2 发布的密钥…

这样的配置,才够格做“黑悟空”“天命人”

《黑神话&#xff1a;悟空》取材自中国古典名著《西游记》&#xff0c;玩家将扮演齐天大圣孙悟空&#xff0c;体验一段惊心动魄的冒险旅程&#xff0c;被媒体誉为中国首款“3A游戏”。 在《黑神话&#xff1a;悟空》发布并风靡全球之际&#xff0c;唯迈医疗的 Phoenix 210 亦同…

【渗透工具箱】灵兔宝盒-Rabbit_Treasure_Box_V1.0.1

Rabbit_Treasure_Box_V1.0.1 是一款基于Windows操作系统的渗透工具箱&#xff0c;旨在提供一个开箱即用的渗透测试工具集合。该工具箱通过 Dawn Launcher 进行管理&#xff0c;支持一键备份和更新。它包含了脚本类工具&#xff0c;在Windows中启动&#xff0c;集成了在线安全工…