《深度学习》OpenCV 计算机视觉入门 (上篇)
OpenCV(Open Source Computer Vision)是一个开放源代码的计算机视觉库,提供了一系列用于处理图像和视频的函数和算法。它可以用于开发各种计算机视觉应用程序,包括人脸检测、目标跟踪、图像分类、图像分割等。OpenCV支持多种编程语言,包括C++、Python和Java,并且可以在多个操作系统上运行,包括Windows、Linux和Mac OS X。OpenCV是一个广泛使
目录
一、了解OpenCV
1、简介
OpenCV(Open Source Computer Vision)是一个开放源代码的计算机视觉库,提供了一系列用于处理图像和视频的函数和算法。
它可以用于开发各种计算机视觉应用程序,包括人脸检测、目标跟踪、图像分类、图像分割等。
OpenCV支持多种编程语言,包括C++、Python和Java,并且可以在多个操作系统上运行,包括Windows、Linux和Mac OS X。OpenCV是一个广泛使用的计算机视觉库,被用于许多领域,如工业自动化、医学影像分析、机器人视觉等。
2、导包
pip install opencv-python==3.4.2
pip install opencv-contrib-python==3.4.2 # opencv扩展库,包含其他一些图像处理算法函数的扩展库
注意:此处两个版本必须相同,防止不兼容问题
3、了解图片构成
一张图片由图像数据组成,图像数据是由像素(pixel)组成的。每个像素代表着图像中的一个点,每个像素包含了图像在该点处的颜色信息。图像的分辨率决定了图像中的像素数量,分辨率越高,图像越清晰。
图像可以以不同的色彩模型来表示颜色,最常用的是RGB色彩模型。RGB色彩模型是一种加法色彩模型,其中的三个通道分别表示了红色R、绿色G和蓝色B的亮度。通过调整这三个分量的数值,可以得到不同的颜色。
此外,还有其他一些重要的图像属性,如亮度、对比度、饱和度等。亮度表示图像的明暗程度,对比度表示图像中不同颜色之间的差异程度,饱和度表示图像的颜色鲜艳程度。
二、函数运用
1、展示图片
import cv2 # 导入OpenCV 包
img = cv2.imread('girl.jpg') # 读取图片
cv2.imshow("aa",img) # 展示图片,展示图片的标签名字为aa
cv2.waitKey(10000) # 图片展示时间,其内参数为毫秒,如果参数设置为0,可以点击键盘任意键关闭图片
cv2.destroyAllWindows() # 用于关闭所有已经创建的窗口。
运行结果如下所示:(图像来源网络,如有侵权敬请告知删除)
2、展示图片属性
1)img.shape 形状
用于获取图像的形状信息。它返回一个包含图像行数、列数和通道数的元组。
2)img.dtype 类型
用于获取图像的数据类型。它返回一个描述图像像素值类型的字符串。
像素值类型:
uint8
:无符号8位整型,表示像素值范围为 0-255。int8
:有符号8位整型,表示像素值范围为 -128-127。uint16
:无符号16位整型,表示像素值范围为 0-65535。int16
:有符号16位整型,表示像素值范围为 -32768-32767。float32
:32位浮点型,表示像素值范围为 -∞-∞。float64
:64位浮点型,表示像素值范围为 -∞-∞。
3)img.size 尺寸
用于获取图像的尺寸信息。它返回一个包含两个元素的元组,表示图像的高度和宽度。
4)演示,img为上图
print("图片形状:",img.shape)
print("图片数据类型:",img.dtype)
print("图形大小:",img.size)
运行结果如下图,
图像形状所示内容表示,宽度为940个像素,高度为627个像素,通道数为3,即RGB三通道
这里的图像尺寸为图像形状的三个值相乘
3、展示灰度图
1)使用cv2.cvtColor()
img = cv2.imread('girl.jpg') # 导入彩色图片
img1 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转变为灰度图
2)直接使用参数
img = cv2.imread('girl.jpg',cv2.IMREAD_GRAYSCALE)
3)运行结果
4)对比
调试模式下可以看到彩色图片的格式为:
灰度图下的格式为:
此时少了一个rgb三通道数
4、保存图片
cv2.imwrite(r'./girl_gray.jpg',img) # 这里的./表示当前目录下,命名为girl_gray.jpg
5、了解视频构成
一个视频由一系列连续的图像帧组成。每一帧都是一个静止的图像,当这些图像以一定的速率连续播放时,就会形成动态的视频。视频的每一帧都包含了图像的像素信息,包括颜色、亮度等。通过在一定的时间间隔内连续播放这些帧,就能够产生流畅的视频效果。
除了图像帧之外,视频还可以包含音频轨道、元数据以及其他附加信息。在视频文件中,这些信息以特定的文件格式(如AVI、MP4等)进行封装,以便能够方便地进行存储和传输。
6、展示视频
1)videoCapture()
创建一个视频捕捉对象,括号内写入参数为视频地址,也可以设置参数为0,则表示捕获当前电脑默认摄像头,如果有多个摄像头可用,可以传入不同的数字来选择相应的摄像头。
2)isopend()
用于判断视频捕获对象是否捕获成功,返回布尔值true、false
3)read()
读取捕获的视频的下一帧图像,一帧表示一个图像,这里可以使用死循环来不断读取所有的帧,
• 返回值ret
用于判断是否读取成功,返回布尔值true和false
• 返回值frame
用于表示读取到的帧,类型为numpy数组,可以对其进行处理,如显示、保存、分析
4)实例展示
import cv2
video_capture = cv2.VideoCapture("tiger9.mp4") # 创建一个视频捕捉对象
if not video_capture.isOpened(): # 判断是否捕获成功
print("错误")
exit()
while True:
# ret返回bool值,读取成功为ret,每帧图片表示frame
ret,frame = video_capture.read()
if not ret:
break
# 灰度图
frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('video',frame)
# 每帧图片停留时间,如果键入esc则停止
if cv2.waitKey(30) == 27:
break
# 释放资源
video_capture.release()
cv2.destroyAllWindows()
此处的cv2.waitkey(30) == 27 用于判断键盘点击位置是否是esc键,其值对应为ascll码
运行结果为:
7、图片的切片
import cv2
a = cv2.imread('girl.jpg') # 导入图片
a_new = a.copy() # 复制图片
# 切片
b = a_new[100:300,100:500] # 高宽,高度为像素值范围为100~300,宽度范围为100~500
cv2.imshow('bb',b) # 展示图片
cv2.waitKey(10000)
cv2.destroyAllWindows()
其运行结果为:
8、切分图片通道
1)直接切分
import cv2
a = cv2.imread('girl.jpg')
a1 = a[:,:,0] # 0表示切分的通道为B
a2 = a[:,:,1] # 1表示切分的通道为G
a3 = a[:,:,2] # 2表示切分的通道为R
cv2.imshow('B',a1)
cv2.waitKey(0)
此时展示的图片为灰色的,如果想展示带切分通道颜色的,可以增加以下内容:
a[:,:,0] = 0 # 将B通道值改变为0
a[:,:,1] = 0 # 将G通道值改变为0
cv2.imshow('R',a) # 展示a图
此时展示画面为:
2)split切分
b,g,r = cv2.split(img)
此时返回三个参数,分别表示bgr三通道的图片
9、图片部分打码
import cv2
import numpy as np
a = cv2.imread('girl.jpg')
a[100:200,200:300] = np.random.randint(0,256,(100,100,3))
cv2.imshow('a',a)
cv2.waitKey(1000)
cv2.destroyAllWindows()
a[100:200,200:300] 表示图片的切片,即将高100~200,宽200~300的位置取出
np.random.randint(0,256,(100,100,3)) 使用numpy函数里的random.randint随机生成整数,括号内参数表示0~256之间的随机整数,(100,100,3)表示生成的形状为一个100x100大小的二维数组,每个元素是一个包含3个随机整数的一维数组。
运行结果为:
10、图片缩放
import cv2
a = cv2.imread('girl.jpg')
a_new = cv2.resize(a,dsize=None,fx=1.3,fy=1.3) # 将图片高宽都更改为1.3倍
cv2.imshow("aa",a_new)
cv2.waitKey(10000)
cv2.destroyAllWindows()
参数解释:
a_new = cv2.resize(a,dsize=None,fx=1.3,fy=1.3)
a
是要调整大小的输入图像。dsize
是目标图像的大小,可以通过设置dsize
参数来指定目标图像的大小,或者通过设置fx
和fy
参数来按比例调整图像大小。例如cv2.resize(a,(400,500))- 如果
dsize
参数不为None
,则将图像调整为dsize
指定的大小。 - 如果
fx
和fy
参数都为None
,则图像大小不会改变,返回与输入图像一样大小的图像。 - 如果只设置了
fx
参数,那么图像的宽度会按照fx
的比例进行调整,高度会根据宽度的比例自动调整。 - 如果只设置了
fy
参数,那么图像的高度会按照fy
的比例进行调整,宽度会根据高度的比例自动调整。 - 如果同时设置了
fx
和fy
参数,那么图像的宽度和高度都会按照对应的比例进行调整。
- 如果
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)