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

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. 发现了嘛? 我们本篇学习用的图片很大,怎么将它缩小一点呐?改变它的形状,我们下篇再见哦~
  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值