跟紧英文教程的步伐…虽然是英文,但我能使它变成中文(截屏翻译).
Opencv Gui的特性
一、图片操作
1.1 读取图片
retval = cv.imread( filename[, flags] )
第一个参数传入图片的名字,注意,如果图片在其他目录,就需要一个目录地址,第二参数是如果写入0,则变成了单通道。目前还没有遇到什么问题…
1.2 输出图片
retval = cv.imwrite( filename, img[, params] )
filename:输出图片的名字
img: 输出的图片
params: 输出的编码,类似图片格式(官方的教程,这个参数没用上,应该影响不大)
二、视频操作
2.1 打开摄像头
cap = cv2.VideoCapture(0)
直接输入参数0,读取本地摄像头。不过还不知道怎么打开USB摄像头,目前手上没有外部摄像头。只是驱动过手提电脑自带摄像头和树莓派CSI摄像头。
2.2 读取摄像头的图像
ret, frame = cap.read()
这个函数要小心点,有两个参数。类似于拍照吧,变成一张图片,不断地循环读取,叠加成一个完整流畅的图像。读取一张图片后,可以对进行处理,如模糊、特征提取、形状匹配、模板匹配等等…
你要在电脑端或树莓派上,看到摄像头的画面,你就要在while里面不断读取,将它在一个框里显示。
2.3 生成视频流(输出录像)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
或者cv2.VideoWriter_fourcc('M','J','P','G')
输出的是一个编码器,然后
out =cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))//输出
分别是:保存文件名、编码器、帧率、视频宽高
最后
out.write(frame) 把摄像头的读取出来的frame传入
三、画图形
3.1 画线
img = cv.line( img, pt1, pt2, color[, thickness[, lineType[, shift]]] )
img = cv2.line(img,(0,0),(511,511),(255,0,0),5)
确定两个点坐标,在img上面画图。可以设置颜色、厚度,线的类型
3.2 画矩形
img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
确定对角坐标,设置颜色和厚度。
3.3 画圆形
img = cv.circle( img, center, radius, color[, thickness[, lineType[, shift]]])
img = cv2.circle(img,(447,63), 63, (0,0,255), -1)
第二个参数确定圆心位置,然后确定半径,颜色和厚度。厚度是负值,意味着填充整个圆。
3.4 画椭圆
img = cv.ellipse( img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]] )
img = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
center:是椭圆的中心位置
axes:确定长轴和短轴
angle:确定旋转角度
startAngle:开始的角度
endAngle: 结束的角度
color:颜色
thickness:负值就填充
假如要绘画半个椭圆,则 endAngle是 startAngle的 180°就可以了。
3.5 画多边形
img = cv.polylines( img, pts, isClosed, color[, thickness[, lineType[, shift]]] )
#点集
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
# -1代表着这一维度根据表明这一维的长度是根据后面的维度的计算出来的。这里为4
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))
isClosed: 确定是否闭合
四、跟踪条
4.1创建跟踪条
cv2.createTrackbar('R','image',0,255,nothing)
创建一个跟踪条,’R‘是跟踪条的名字,’image‘是父窗口的名字,然后是滑块的初始位置和最大值。最后一个参数是设置回调函数。
4.2 读取跟踪条数值
r = cv2.getTrackbarPos('R','image')
返回的是跟踪跳滑块的数值