文章目录
1. 图像的IO操作
1.1 读取图像
- imread()
参数:
读取的图像
读取方式的标志(可以为空)
- cv.IMREADCOLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。
- cv.IMREADGRAYSCALE:以灰度模式加载图像
- cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式
注:可以使用1、0、-1代替上面三个标志import numpy as np import cv2 as cv # 以灰度图的形式读取图像 img = cv.imread('img01.jpg',0)
注:若图片的路径错误,会返回一个None值
1.2 显示图像与关闭图像
- imshow()
参数:
显示图像的窗口名称,以字符串类型表示
待加载的图像
注:当调用显示图像的接口后,同时要调用waitkey()给图像绘制留下时间,否则窗口会出现无法响应,图像则无法正常显示
# opencv中显示
cv.imshow('image',img)
cv.waitKey(0)
- namedWindow(winname, flags=None)
参数:
- 窗口名
- 窗口属性
WINDOW_NORMAL显示图像后,允许用户随意调整窗口大小
WINDOW_AUTOSIZE根据图像大小显示窗口,不允许用户调整大小
WINDOW_FREERATIO窗口大小自适应比例
WINDOW_KEEPRATIO保持图像的比例
注:显示图像时,此函数非必要可以不用,imshow()可直接创建并显示窗口,如若对窗口属性有限制,则需使用该窗口 - waitKey():无限期地等待一个键事件或等待延迟毫秒,显示图像窗口时,必须使用waitKey()函数。在读取视频的循环while中,waitKey(n)的作用是逐帧显示视频帧,可以合理地选择n的大小,以缓和的速度播放视频。
参数:
waitKey()与waitKey(0),都代表无限等待
waitKey(n),等待n毫秒后,关闭显示的窗口
destroyAllWindows():销毁窗口,释放资源
1.3 保存图像
- imwrite()
参数:
文件保存的路径
所保存的图像名
# testopencv.py
import cv2
cv2.namedWindow('new', cv2.WINDOW_AUTOSIZE) # 创建窗口('名字','窗口属性')
img = cv2.imread('D:/Py_learn/1.jpg') # 读取图片
cv2.imshow('new', img) # 图像的显示,也可以创建多个窗口
key = cv2.waitKey() # 等待时间,毫秒级,0表示任意键终止
while True:
if (key & 0xFF == ord('q')):# ord获取AscII码
break
elif (key & 0xFF == ord('s')):
cv2.imwrite("girl.jpg", img)
print(ord('q'))
cv2.destroyAllWindows() # 销毁窗口,释放资源
2. 视频操作
2.1 创建视频读取对象
- VideoCapture(filepath)
参数:
视频文件的路径
0自动获取设备摄像头采集视频
2.2 获取视频属性
- get(proId)
参数:
- 0-18的数字,分别代表不同的视频属性
常用属性:
2.3 修改视频属性
- set(propId, value)
参数:
- proId,0-18的数字,分别代表不同的视频属性
- value,修改后的属性值
2.4 判断图像是否读取成功
- x.isOpened()
如成功返回True,否则返回False,获取视频的一帧图像- ret, frame = x.read()
参数:
- ret:若获取成功返回True,否则False
- Frame:获取到的某一帧的图像
- ret, frame = x.read()
- 释放视频对象资源
release()
import numpy as np
import cv2 as cv
# 1.获取视频对象
cap = cv.VideoCapture('img/01.mp4')
# 2.判断是否读取成功
while(cap.isOpened()):
# 3.获取每一帧图像
#ret: 若获取成功返回True,获取失败,返回False
#Frame: 获取到的某一帧的图像
ret, frame = cap.read()
# 4. 获取成功显示图像
if ret == True:
cv.imshow('frame',frame)
# 5.每一帧间隔为25ms
if cv.waitKey(25) & 0xFF == ord('q'):
break
# 6.释放视频对象
cap.release()
cv.destroyAllwindows()
2.5 创建视频保存对象
- VideoWriter(filename,fourcc, fps, frameSize)
参数:
filename:视频保存的位置
fourcc:指定视频解码器的4字节代码
fps:视频帧率
frameSize:帧大小
设置视频的解码器:- VideoWriter_fourcc( c1, c2, c3, c4 )
参数:
c1,c2,c3,c4: 是视频编解码器的4字节代码,常用的有:
Winows中:DIVX(.avi)
Os中:MJPG(.mp4), DIVX(.avi), X264(.mkv)
- VideoWriter_fourcc( c1, c2, c3, c4 )
import cv2 as cv
# 1. 读取视频
cap = cv.VideoCapture("img/01.mp4")
# 2. 获取图像的属性(宽和高),并将其转换为整数
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
# 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('outpy.avi', cv.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))
while (True):
# 4.获取视频中的每一帧图像
ret, frame = cap.read()
if ret == True:
# 5.将每一帧图像写入到输出文件中
out.write(frame)
else:
break
# 6.释放资源
cap.release()
out.release()
cv.destroyAllWindows()
3. OpenCv对鼠标的控制
3.1 设置鼠标回调函数
- setMouseCallback(winname, callback, userdata)
参数:
winname:窗口名字
userdata:传给回调函数的参数,默认None
callback:鼠标响应函数,回调
函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为- void onMouse(int event, int x, int y, int flags, void* param)
event:鼠标动作,0-9不同的数值对应不同的操作。
flags:鼠标动作标志符,不同的数字对应不同的事件
- void onMouse(int event, int x, int y, int flags, void* param)
# mouse.py
import cv2
import numpy as np
# 设置鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
print(event, x, y, flags, userdata)
# 创建窗口
cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse', 640, 360)
# 设置鼠标回调
cv2.setMouseCallback('mouse', mouse_callback, '123')
# 显示窗口和背景
img = np.zeros((360, 640, 3), np.uint8)
while True:
cv2.imshow('mouse', img)
key = cv2.waitKey(1)
if key & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
4. TrackBar控件
4.1 滚动条的创建
- createTrackbar( trackbarname, winname,int value, int count,TrackbarCallback onChange = 0,void userdata = None)
参数:
trackbarname:滚动条的名字
winname:绑定的窗口名字
value:滑块的初始位置
count:滑块的最大位置
TrackbarCallback:回调函数,拨动Trackbar返回的函数
userdata:用户传给回调函数的数据,默认为None- 回调函数的定义:
def callbackfunc(int value, void* userdata);
参数:
value传入的是滑块位置变量。
userdata是打包的其他数据。可以不传参
- 回调函数的定义:
4.2 设置滚动条属性
- setTrackbarPos(trackbarname, winname, int pos)
参数:
trackbarname:滚动条的名字
winname:绑定的窗口名字
pos:返回Trackbar的属性
# trackBar.py
import cv2
import numpy as np
def callback():
pass
# 创建窗口
cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
# 创建tracker
cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
# 创建一个背景图片
img = np.zeros((480, 360, 3), np.uint8)
while True:
# 获取当前trackbar的值
r = cv2.getTrackbarPos('R', 'trackbar')
g = cv2.getTrackbarPos('G', 'trackbar')
b = cv2.getTrackbarPos('B', 'trackbar')
# 改变图片的背景颜色
img[:] = [b, g, r]
cv2.imshow('trackbar', img)
key = cv2.waitKey(10)
if key & 0xFF == ord('q'):
break
cv2.destroyAllWindows()