python 3.6.2
cv2
〇、tips
- np array 表示的是矩阵,下标第一唯是行号,对应y坐标,第二唯是列号,对应x坐标。cv对图像做操作时,则是按照空间关系(x,y)
一、基本GUI
- 窗口
- 交互事件
1.窗口
- 创建及定位
cv2.namedWindow("w1",cv2.WINDOW_AUTOSIZE)
cv2.moveWindow("w1",50,100)
- 显示图像
img=cv2.imread("lena.jpg")
cv2.imshow("w1",img)
- 关闭窗口
cv2.destroyWindow("w1")
- 缩放窗口
cv2.resizeWindow("w1",100,200)
2.交互事件
键盘
cv2.waitKey(delay)
# 当delay<=0时,无限期等下去;delay>0,等待delay毫秒
# 1000毫秒=1秒
鼠标
事件机制为:
1. 定义统一格式的回调函数,对相应的事件做出响应。
2. 绑定窗口和回调函数
3. 切记,重新绘制一定要重新调用imshow,否则你什么都看不见!!!
鼠标事件:
Event
EVENT_MOUSEMOVE 0
EVENT_LBUTTONDOWN 1
EVENT_RBUTTONDOWN 2
EVENT_MBUTTONDOWN 3
EVENT_LBUTTONUP 4
EVENT_RBUTTONUP 5
EVENT_MBUTTONUP 6
EVENT_LBUTTONDBLCLK 7
EVENT_RBUTTONDBLCLK 8
EVENT_MBUTTONDBLCLK 9
Flag
EVENT_FLAG_LBUTTON 1
EVENT_FLAG_RBUTTON 2
EVENT_FLAG_MBUTTON 4
EVENT_FLAG_CTRLKEY 8
EVENT_FLAG_SHIFTKEY 16
EVENT_FLAG_ALTKEY 32
以后再更新具体说明
回调函数举例:
def draw_circle(event,x,y,flags,param):#参数表都按照这个格式写
# 以下自由发挥
if event==cv2.EVENT_LBUTTONDBLCLK:
cv2.circle(img,(x,y),200,(255,0,0),3)
cv2.imshow('w1',img)
绑定窗口与回调函数
cv2.setMouseCallback('w1',draw_circle)
二、图像操作
以后更新
三、视频操作
以后更新
四、高级GUI
- 绘制基本图形
- 绘制文字(不支持汉字?)
1. Drawing
1) 画线段
cv2.line(img,(100,100),(200,200),(0,255,0),8)#(画布,起点,终点,颜色,画笔粗细(-1表示填充))
cv2.imshow('w1',img)
2) 画矩形
cv2.rectangle(img,(100,100),(200,200),(0,255,0),1)#(画布,矩形左上角,矩形右下角,颜色,画笔粗细(-1表示填充))
cv2.imshow('w1',img)
3) 画圆
cv2.circle(img,(100,100),20,(0,255,0),3)#(画布,圆心,半径,颜色,画笔粗细(-1表示填充))
cv2.imshow('w1',img)
4) 画多边形
定义点集,必须转换成 顶点数12大小的矩阵
pts = np.array([[100,100], [200, 100],[200,200],[150,220],[100,200]], np.int32).reshape((-1, 1, 2))
cv2.polylines(img, [pts], False, (0, 255, 255),1)
# ture表示闭合,false表示不闭合
# 最后一个参数表示画笔粗细,这里不能设置为-1哦~
cv2.imshow('w1',img)
5) 画填充多边形
pts = np.array([[100,100], [200, 100],[200,200],[150,220],[100,200]], np.int32).reshape((-1, 1, 2))
cv2.fillPoly(img, [pts],(0,255,0))
cv2.imshow('w1',img)
2. 写字
这里的操作与cv差别还是挺大的
# 定义字体
font=cv2.FONT_HERSHEY_SIMPLEX
# 放置文本
cv2.putText(img,"hello world",(30,30),font,0.5,(0,255,0),1)#(画布,文本,左下角位置,字体,大小,颜色,粗细)
cv2.imshow('w1',img)
五、简单数学函数
以后更新
网友评论