opencv官方文件
一:Mac下命令方式搭建opencv开发环境
1.安装homebrew 在终端输入homebrew下的命令
2.根据提示配置环境
3.通过以下两个命令安装配置环境
brew install python@3.9
pip3 install numpy matplotlib opencv_python
配置完成后可顺利导入相应包即可
opencv开发工具:pyсharm vscode
利用开发工具尝试的第一个小例子:通过CV2打开一张图片,现实时长用waitKey
如果小写会出现以下错误提示:AttributeError: module 'cv2' has no attribute 'waitkey'
Mac系统下可以直接 mkdir&&cd&&code.
然后进入代码编写即可
二:车辆检测
1.窗口的展示
1.1:创建和显示窗口
namedWindow()
imshow()
destoryAllWindows()
resizeWindows 具体参数可以下载master opencv 进行查看
import cv2
cv2.namedWindow('new',cv2.WINDOW_NORMAL) #创建窗口
cv2.resizeWindow('new',1920,1080)#resize窗口的大小
cv2.imshow('new',0) #展示窗口
key=cv2.waitKey(0)#设置展示窗口的时长 单位毫秒
if (key == 'q'):#接受键盘信息 如果输入q 结束窗口展示
exit()
cv2.destroyAllWindows() #释放掉所有窗口资源
设置鼠标回调函数
setMouseCallback(winname,callback,userdate) 窗口名字 回调函数 参数
callback (event,x, y, flags, userdate) 事件(左键 右键) 坐标位置
opencv控制鼠标:
import cv2
import numpy as np
from cv2 import resizeWindow
#设置函数
def mouse_callback(event,x,y,flags,userdata):
print(event,x,y,flags,userdata)
#mouse_callback(1,100,100,16,"666")
#创建窗口
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) #与窗口的长宽比是相反的360 640
while True:
cv2.imshow('mouse',img)
key = cv2.waitKey(1)
if key & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
2.图像视频的加载(imread)
2.1:imread
im == image
imread(path,flag)
加入图片可能存在的问题:
import cv2
from cv2 import WINDOW_NORMAL
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
img=cv2.imread('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.png')#读入图片
cv2.imshow('img',img)
key=cv2.waitKey(0)
print(key)
print('q')
print(ord('q'))
if(key & 0xFF ==ord('q')): #最好更改成这样 这样才能真正进入退出的代码段执行
print(1111)
cv2.destroyAllWindows()#直接替换exit()
保存图片:
imwrite(name,img). name:要保存的文件名。img:是mat类型
import cv2
from cv2 import WINDOW_NORMAL
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
img=cv2.imread('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.png')#读入图片
while True:#加了while循环
cv2.imshow('img',img)
key=cv2.waitKey(0)
if(key &0xFF ==ord('q')):
break
elif(key &0xFF ==ord('s')):
cv2.imwrite('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.jpeg',img)
cv2.destroyAllWindows()
2.2:视频采集:
VideoCapure()
cap.read() 返回两个值,第一个为状态值,读到帧为true,第二个值为视频帧
cap.release()
import cv2
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
#获取视频设备
cap = cv2.VideoCapture(0)
while True:
ret,frame=cap.read() #从设备中(摄像头)读取数据 视频帧
#一帧一帧的读 循环所以形成了视频
cv2.imshow('video',frame) #将获得的视频帧在窗口中显示
key = cv2.waitKey(10)#等待键盘事件,如果为q退出
if(key & 0xFF == ord('q')):
break
#释放videoCapture
cap.release()
cv2.destroyAllWindows()
如何视频文件中读取视频帧:只需在cv2.VideoCapture中写入视频地址即可
#获取视频设备/从视频文件中读取视频帧
cap = cv2.VideoCapture('/Users/wangcc/Desktop/opencv/IMG_5091.MOV')
2.3:如何将视频数据录制成多媒体文件
VideoWriter 参数一位输出文件 参数二为多媒体文件格式(VideoWriter_fourcc)帧率➕分辨率
write
release
#创建VideoWriter为写多媒体文件
fourcc=cv2.VideoWriter_fourcc(*'MJPG')#创建fourcc
vw=cv2.VideoWriter('./out.mp4',fourcc,25,(1280,720))
#某一路径下 fourcc 帧率 分辨率要与自己摄像头的分辨率一样
#写数据到多媒体文件
vw.writer(frame)
#释放VideoWriter资源
vw.release()
import cv2
#创建VideoWriter为写多媒体文件
fourcc=cv2.VideoWriter_fourcc('M','J','P','G')#创建fourcc
vw=cv2.VideoWriter('/Users/wangcc/Desktop/opencv',fourcc,25,(1296,694)) #某一路径下 fourcc 帧率 分辨率
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,360)
#获取视频设备/从视频文件中读取视频帧
#cap = cv2.VideoCapture('/Users/wangcc/Desktop/opencv/IMG_5091.MOV')
cap = cv2.VideoCapture(0)
while cap.isOpened(): #判断摄像头是否为打开状态
ret,frame=cap.read() #从设备中(摄像头)读取数据 视频帧
if ret == True:
cv2.imshow('video',frame) #将获得的视频帧在窗口中显示
cv2.resizeWindow('video',640,360) #重新将窗口设置为指定大小
#写数据到多媒体文件
vw.writer(frame)
key = cv2.waitKey(1)#等待键盘事件,如果为q退出
if(key & 0xFF == ord('q')):
break
else:
break
#释放videoCapture
cap.release()
#释放VideoWriter资源
vw.release()
cv2.destroyAllWindows()
TrackBar控件:
createTrackBar 参数trackbarname(控件名), winname(窗口名),value:trackbar当前值
count:最小值为0,最大值为count。callback,userdate
getTrackbarPos 参数:输入值trackbarname,winname. 输出:当前值
import cv2
import numpy as np
def callback():
pass
#创建窗口
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)
#创建trackbar
cv2.createTrackbar('R','trackbar',250, 255, callback)
cv2.createTrackbar('G','trackbar',100, 255, callback)
cv2.createTrackbar('B','trackbar',100, 255, callback)
#设置一个纯黑色的背景
img = np.zeros((480,640,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()
3.基本图形的绘制
3.1:openCV的色彩空间
openCV默认使用BGR
YUV:用在视频中 4:2:0 4:2:2 4:4:4
HSV 与 HSL:
Hue:色相,即色彩,如红色,蓝色
Saturation:饱和度,颜色的纯度
Value:明度 Lightness:
openCV色彩空间的转换
#颜色空间转换
cvt_img = cv2.cvtColor(img,colorspaces[index])
import cv2
def callback():
pass
cv2.namedWindow('color',cv2.WINDOW_NORMAL)
img = cv2.imread('/Users/wangcc/Desktop/截屏2022-07-22 下午2.56.35.png')
colorspaces=[cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor','color',0,len(colorspaces),callback)
while True:
index = cv2.getTrackbarPos('curcolor','color')
#颜色空间转换
cvt_img = cv2.cvtColor(img,colorspa