一、环境搭建
可以参考CSDN内搭建方法(非常详细),其中需要注意的是因为每个人安装的opencv版本不同安装位置文件路径也会不同,还有配置系统环境变量的path一定要准确,如果出现文件没找到等问题可以去检查一下配置的系统环境变量。
二、图像视频的加载与展示
介绍opencv库中用于图像和视频操作的几个常用函数以及其参数设置。
1、创建和显示窗口
(1)namedWindow('winname',flag)
用来创建一个窗口,并且给窗口命名以及设置窗口的类型;
winname为窗口的名字;
flag为窗口的类型,比如cv.WINDOW_NORMAL表示用户可以调整窗口大小(无约束)/也用于将全屏窗口切换为正常大小。其他flag可以去查手册;
(2)imshow('winname',mat)
显示指定的窗口,并且指定图像;
winname为指定的窗口名;
mat指定的图像,一般由其他函数生成返回值mat;
(3)destroyALLWindows()
释放所有窗口资源
2、图片视频加载采集和保存
(1)imread(path,flag) -->retval
加载图片,并且返回图片参数
path需要写明指定图片的路径和文件名(有后缀),其中文件路径Windows下的和Linux下的不同;
flag是可对图片进行加工如灰度图、二值图输出。可以不写,不写以原图片输出;
retval是函数的返回值,可用填入imshow进行展示,是mat;
(2) imwrite(name,img)
保存指定图片到指定位置并且命名
name为字符型,写明保存的路径和文件名(有后缀);
img是mat类型,指定保存的图片;
(3)VideoCapture(filename,api)-->retval
用来打开视频文件、捕获设备或者API视频流;有返回值;
filename指定需要打开的视频文件(有后缀);
api可以指定api视频后端设备;
(4)ret,frame = ****.read()
加载视频,并且返回两个参数;
ret为是否读取成功参数;
frame为mat类型,为视频的操作参数;
****为需要读取的捕获视频,给返回值命的名。
(5)****.release()
释放****文件的视频资源; ****是视频文件的索引api;
(6)videowrite( filename, fourcc, fps,size )-->retval
创建videowriter为写多媒体文件,并且指定好文件路径、文件名、视频格式、视频帧数和视频分辨率;
filename为视频保存的路径path和文件名(有后缀);
fourcc是指定四个字符的编码器,常用的是MJPG(.mp4)、DIVX(windows\.avi)、X264(.mkv);ep:VideoWriter_fourcc(*'MJPG')
fps帧数,可以查看视频帧数设置;
size分辨率,也可以通过查看视频分辨率设置,如果设置的参数和视频不匹配将会保存失败;
注意此函数只是创建写多媒体文件,具体保存要用到(-->retval).write(视频mat);释放要用到-->retval.release。
3、基本图像的绘制与鼠标控制
(1)setMouseCallback(winname,callback,userdata)
设置鼠标回调函数,并且指定窗口,声明回调函数,传输的参数;
winname指定窗口;
callback声明回调函数,函数名不一定是callback,可以自己设置;
userdata传输的参数,可以不设置,默认是not;
(2)callback(event , x , y , flags , userdata)
具体的鼠标回调函数配置
event事件,可以是鼠标移动、按下左键、按下右键等;
x,y表示鼠标的坐标;
flags鼠标键和组合键;
userdata可选参数;
(3)createTrackbar(trackbarname, winname, value, count, callback, userdata)
创建跟踪栏,并且指定跟踪栏名字、放置的窗口名、当前值、最大值、回调函数和传输参数;
trackbarname给跟踪栏命名;
winname指定窗口;
value、count当前值和最大值;
callback、userdata回调函数和传输值,一般可以设置一个象征性的;
(4)getTrackbarPos(trackbarname , winname)-->value
获取指定窗口指定trackbar的值
(5)利用numpy库绘制一张简单图片
import numpy as np
img = np.zeros((480, 640, 3), np.uint8)
此代码表示生成全为0的分辨率为640*480(和常规分辨率两个参数位置不同)的三原色图片。
三、相关代码展示
1、简单图片显示
import cv2
import numpy
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
#F:\\tupian\\chinacar.jpeg
img = cv2.imread("F:\\tupian\\chinacar.jpeg")
while True:
cv2.imshow('img',img)
key = cv2.waitKey(0)
if(key & 0xFF == ord('q')):
break
elif(key & 0xFF == ord('s')):
cv2.imwrite("F:\\tupian\\123.png",img)
cv2.destroyAllWindows()
2、设备视频捕获和保存
import cv2
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
vw = cv2.VideoWriter('F:\\tupian\\333.mp4',fourcc,30,(1280,720))
#创建窗口
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
#创建videowrite为写多媒体文件
cv2.resizeWindow('video',1280,720)
#获取视频设备/读取视频文件,从视频文件中读取视频帧
cap = cv2.VideoCapture(0)
#判断摄像头是否为打开状态
while cap.isOpened():
#从摄像头读取视频帧
ret, frame = cap.read()
if ret == True:
#将视频在窗口中显示
cv2.imshow('video',frame)
cv2.resizeWindow('video',1280,720)
#写数据到多媒体文件
vw.write(frame)
#等待键盘事件,输入q推出
key = cv2.waitKey(10)
if(key & 0xFF == ord('q')):
break
else:
break
#释放video capture资源
cap.release()
cv2.destroyAllWindows()
vw.release()
3、鼠标回调函数配置
import cv2
import numpy as np
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',1280,720)
#设置鼠标回调
cv2.setMouseCallback('mouse',mouse_callback,"123")
img = np.zeros((720,1280,3), np.uint8)
while True:
cv2.imshow('mouse',img)
key = cv2.waitKey(0)
if (key & 0xFF == ord('q')):
break
cv2.destroyAllWindows()
4、trackbar使用和基础图片绘制
import cv2
import numpy as np
def callback():
pass
#创建窗口
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)
#创建trackbar
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, 640, 3), np.uint8)
while True:
#读取当前trackbar的值
r = cv2.getTrackbarPos('R','trackbar')
g = cv2.getTrackbarPos('G','trackbar')
b = cv2.getTrackbarPos('B','trackbar')
#给img图片附上BGR值,改变图片颜色
img[:] = [b, g, r]
cv2.imshow('trackbar', img)
key = cv2.waitKey(10)
if( key & 0xFF == ord( 'q')):
break
cv2.destroyAllWindows()