图像入门
- 1. 创建窗口
- namedWindow()
- resizeWindow()
- destroyAllWindow()
- 2.显示图像
- imread()
- imshow()
- imwrite()
- waitKey()
- flip()
- 代码演示
- 3.显示视频
- VideoCapure()对象
- cap.get()
- cap.isOpened()
- cap.read()
- cap.release()
- 部分功能代码演示
- VideoWriter()对象
- VideoWriter_fourcc()
- write()
- release()
- 部分代码展示:
- 4.鼠标控制
- setMouseCallBack()
- callback()
- 部分代码展示:
- 5. trackBar组件
- createTrackbar()
- getTrackbarPos()
- 部分代码示例
- 6. 图像的基本操作
- cvtColor()
- 部分代码展示:
1. 创建窗口
进行图像操作时,我们要用窗口来显示对图像所进行的操作。用窗口来观察操作前后的效果。
namedWindow()
创建一个新窗口
cv2.namedWindow(winname,图像格式)
winname:创建的窗口名字
图像格式:WINDOW_NORMAL :可以改变窗口大小。WINDOW_AUTOSIZE:自动适应窗口大小,不能自己改变窗口大小。
resizeWindow()
修改窗口大小
cv2.resizeWindow(winname,width,height)
winname:修改的窗口名字
width:宽
height:高
destroyAllWindow()
销毁所有窗口无参数。
cv2.destroyAllWindow()
销毁指定窗口,参数为窗口名。
cv2.destroyWindow(winname)
2.显示图像
在窗口创建好之后,我们就可以通过窗口,把图像显示出来。
imread()
读取指定路径的图像
cv2.imread(path,flag=cv2.IMREAD_COLOR)
path:读取文件的路径
flag:读取图像的方式。cv2.IMREAD_COLOR(加载彩色图像,默认标志 ) 、cv2.IMREAD_GRAYSCALE(灰度模式加载图像)、cv2.IMREAD_UNCHANGED:加载图像,包括alpha通道。
这三种标志可分别用1、0、-1代替。
返回值为mat
imshow()
在窗口中显示图像
cv2.imshow(winname,mat)
指定winname窗口,显示mat对象。
imwrite()
将图像保存起来
cv2.imwrie(path,mat)
path:保存图像的路径
mat:将要保存图像的信息。
waitKey()
窗口显示时间(让窗口等一下,我要输入数据)
cv2.waitKey(time)
time:窗口等待的时间,单位ms,time=0,那么一直等待输入数据。
返回值 用户从键盘输入的ASCII码值。
flip()
将图像进行垂直,水平翻折
cv2.flip(mat,-1/0/1)
mat:就是进行翻折的图片帧
-1:x+y轴翻折、0:x轴翻折、1:y轴翻折
返回值 是翻折之后的图片
代码演示
import cv2
'''
前面代码统一演示示例:
'''
#创建窗口
cv2.namedWindow('flower',cv2.WINDOW_NORMAL)
#修改窗口大小
cv2.resizeWindow('flower', 640, 480)
# 彩色方式读取图片文件,用img来接收
img = cv2.imread('./image/girl.png',1)
# 显示图像
cv2.imshow('flower',img)
# 保存图像
cv2.imwrite('./image/flower1.png', img)
# 一直显示,等待用户输入数据
cv2.waitKey(0)
# 销毁窗口
cv2.destroyWindow('flower')
3.显示视频
需要用到视频操作的相关接口,OpenCV提供了VideoCapure()对象,用来进行相关操作。
VideoCapure()对象
视频捕获的对象
cap = cv2.VIdeoCapure(path/数字01)
创建好后,cap就是一个视频操作的对象(以后都用cap来表示)
path:读取视频文件需要放视频文件的完整路径
数字0/1:0是默认电脑摄像头。
cap.get()
获得视频帧中的属性
cap.get(propld)
propld:3表示宽度,4表示高度,5表示帧率
返回值由输入的数据决定
cap.isOpened()
用来检查创建的对象,是否已经成功打开
cap.isOpened()
返回值是一个boll值,True表示成功打开,否则打开失败
cap.read()
从捕获的摄像头或者视频帧中读取视频帧。
cap.read()
两个返回值,第一个boll值,代表该帧是否正确读取到,第二个返回值是该帧的数据(mat)
cap.release()
释放cap对象捕获的设备
cap.release()
部分功能代码演示
import cv2
# 创建一个窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
# 创建一个视频对象
cap = cv2.VideoCapture(0)
# 检查是否打开
if not cap.isOpened():
print('Video opened failed')
exit(-1)
# 获取视频帧的宽和高
print(cap.get(3))
print(cap.get(4))
while True:
# 读取视频帧
ret, frame = cap.read()
if not ret:
print('视频帧读取有误!')
break
# 显示视频帧
cv2.imshow('video', frame)
key = cv2.waitKey(10)
# 按q退出,按s保存
if (key & 0xff) == ord('q'):
print('退出成功')
break
# 释放资源
cv2.destroyAllWindows()
cap.release()
VideoWriter()对象
创建一个保存视频的对象,定义好path、编码格式、帧数、视频帧大小,是否是彩色格式(默认为彩色)
out = cv2.VideoWriter(filename,fourcc,fps,frameSize,[IsColor])
filename:视频的路径和文件名
fourcc:压缩帧的4字符编/解码器的选项
fps:视频的帧数
frameSize:视频帧的大小(width,height)
VideoWriter_fourcc()
用来设置编/解码器。
fourcc = cv2.VideoWriter_fourcc(*‘字符串’)
参数:适合编码的各种缩写,-1为自动匹配合适的编/解码器。
write()
先将视频帧编码,之后再将视频帧写入要保存的路径中
out.write(mat)
mat:保存的视频帧
release()
释放类,并且把缓冲区的数据强制编码,再输出成文件。
out.release()
部分代码展示:
读取视频仅仅需要将创建视频的对象,修改成读取的文件路径即可
import cv2
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# 创建一个窗口
cv2.namedWindow('video', cv2.WINDOW_NORMAL)
# 创建一个输出对象
out = cv2.VideoWriter('./video/out.mp4', fourcc, 20, (640, 480))
# 创建一个视频对象
cap = cv2.VideoCapture(0)
# 检查是否打开
if not cap.isOpened():
print('Video opened failed')
exit(-1)
# 获取视频帧的宽和高
print(cap.get(3))
print(cap.get(4))
while True:
# 读取视频帧
ret, frame = cap.read()
if not ret:
print('视频帧读取有误!')
break
# 将视频帧反转保存并显示视频帧
frame = cv2.flip(frame, 1)
out.write(frame)
cv2.imshow('video', frame)
key = cv2.waitKey(1000//20)
# 按q退出
if (key & 0xff) == ord('q'):
print('退出成功')
break
# 释放资源
cv2.destroyAllWindows()
out.release()
cap.release()
4.鼠标控制
可以在图像中控制鼠标来进行一些操作。
setMouseCallBack()
设置鼠标回调函数
cv2.setMouseCallBack(winname,callback,uerdata)
winname:在哪个窗口调用这个函数
callback:回调函数,需要用户自己设置,用来完成一些事件。
uerdata:用户自己额外传送的数据。
callback()
自己定义的一个函数
def callback(event,x,y,flags,uerdata)
event:鼠标进行的动作
flags:键盘进行的动作
(x,y):鼠标的横纵坐标
uerdata:调用这个函数的数据。
event:
flags:
部分代码展示:
import cv2
import numpy as np
def mouse_back(event, x, y, flags, uerdata):
print(event, x, y, flags, uerdata)
# 创建窗口,并且调整大小
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 480)
# 设置鼠标回调
cv2.setMouseCallback('mouse',mouse_back,'1111')
#创建一个纯黑的图像,行数,列数,几个通道,图片格式
img = np.zeros((480, 640, 3), np.uint8)
while True:
cv2.imshow('mouse',img)
key = cv2.waitKey(10)
if key & 0xFF == ord('q'):
print('退出成功')
break
# 销毁资源
cv2.destroyAllWindows()
5. trackBar组件
createTrackbar()
用于创建一个tarckbar,目的是进行调节量
cv2.createTrackbar(trackbarname,winname,value,count,callback,userdata)
trackbarname:轨道名称
winname:将该组件和winname绑定。
value:组件的当前值。
count:组件的最大值,从0开始算。
callback:回调函数
userdata:用户自己传的数据
getTrackbarPos()
用于获取trackbar的位置
cv2.getTrackbarPos(trackbarname,winname)
taackbainame:trackbar的控件名称
winname:控件绑定的窗口
返回值 trackbar的位置
部分代码示例
import cv2
import numpy as np
def track_callback():
pass
# 创建一个窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
cv2.resizeWindow('trackbar', 640, 480)
# 创建一个全黑图像
img = np.zeros((480, 640, 3), np.uint8)
# 创建三个trackbar
cv2.createTrackbar('R', 'trackbar', 0, 255, track_callback)
cv2.createTrackbar('G', 'trackbar', 0, 255, track_callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, track_callback)
while True:
# 首先展示图片
cv2.imshow('trackbar', img)
# 获取三个trackbar的值
r = cv2.getTrackbarPos('R', 'trackbar')
g = cv2.getTrackbarPos('G', 'trackbar')
b = cv2.getTrackbarPos('B', 'trackbar')
key = cv2.waitKey(10)
if key & 0xff == ord('q'):
print("退出成功")
break
img[:] = [b, g, r]
# 释放资源
cv2.destroyAllWindows()
6. 图像的基本操作
cvtColor()
用于将图像从一个颜色空间转换为另一个颜色空间。
dst = cv2.cvtColor(src,flag)
src:需要转换的图像
flag:见下表
返回值dst,转换颜色空间后的图像
(flag)标志 | 简记 | 作用 |
---|---|---|
cv2.COLOR_BGR2BGRA | 0 | 为RGB图像添加alpha通道 |
cv2.COLOR_BGR2RGB | 4 | 由BGR变成RGB顺序 |
cv2.COLOR_BGR2GRAY | 10 | 将彩色图像变成灰度图像 |
cv2.COLOR_BGR2YUV | 82 | 从RGB颜色空间转成YUV颜色空间 |
cv2.COLOR_BGR2HSV | 40 | 从RGB颜色空间转成HSV颜色空间 |
部分代码展示:
import cv2
def callback(x):
pass
# 创建窗口
cv2.namedWindow('color',cv2.WINDOW_NORMAL)
cv2.resizeWindow('color', 640, 480)
# 读取一个图像
img = cv2.imread('./image/girl.png')
# 创建一个列表
colorspaces = [cv2.COLOR_BGR2RGB, cv2.COLOR_BGR2BGRA, cv2.COLOR_BGR2GRAY,
cv2.COLOR_BGR2YUV, cv2.COLOR_BGR2HSV]
# 创建一个trackbar
cv2.createTrackbar('cvt_color', 'color', 0, len(colorspaces)-1, callback)
while True:
# 获取trackbar位置
index = cv2.getTrackbarPos('cvt_color', 'color')
# 转换图像
cvt_img = cv2.cvtColor(img, colorspaces[index])
cv2.imshow('color', cvt_img)
key = cv2.waitKey(10)
if key & 0xff == ord('q'):
break
# 销毁资源
cv2.destroyAllWindows()