基础函数
cv2.creatTrackbar(trackbarname,winname,value,count,TrackbarCallback)
#用于创建一个可以调整数值的滑动条,并将滑动条附加到指定的窗口上。
#例:cv2.createTrackbar('R','image',0,255,nothing)
#trackbarname:滑动条的名字
#winname:滑动条被放置窗口的名字
#value:滑动条的默认位置
#count:滑动条的最大值
#TrackbarCallback:回调函数
a = cv2.getTrackbarPos(trackbarname,winname)
#得到滑动条的数值a
cv2.setTrackbarPos(trackbarname,winname, 100)
#设置滑动条的默认值
滑动条改变窗口颜色
import cv2
import numpy as np
import math
def nothing (x) :
pass
img = np.zeros((512, 1000, 3), np.uint8)
cv2.namedWindow('image', 0)
#绘图颜色R,G,B
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)
#开关
switch='0:OFF\n1:ON'
cv2.createTrackbar(switch,'image',0,1,nothing)
#设置滑动条的默认值
cv2.setTrackbarPos('R','image', 100)
cv2.setTrackbarPos('G','image', 100)
cv2.setTrackbarPos('B','image', 100)
while 1:
cv2.imshow('image', img)
r = cv2.getTrackbarPos('R', 'image')
g = cv2.getTrackbarPos('G', 'image')
b = cv2.getTrackbarPos('B', 'image')
# 窗口颜色设置
img[:] = [b, g, r]
k = cv2.waitKey(1) & 0XFF
if k == 27:
break
cv2.destroyAllWindows()
Gui小习题:
在一张白(255,255,255)的image中,利用滑动条选择颜色(rgb),用鼠标左键画圆,右键画矩形 (圆和矩形大小不固定)
思路
1.搞定画圆和画矩形
2.增加滑动条,并用来控制画笔颜色
3.设置白色image
画圆和画矩形
#左键拖拽时记录起始坐标,不画
if event == cv2.EVENT_FLAG_LBUTTON:
ix, iy = x, y
#当鼠标松开左键时记下坐标
#确定圆心和半径,用拖拽法画圆
if event == cv2.EVENT_LBUTTONUP:
#计算半径的长度
xlm = (x - ix)
ylm = (y - iy)
le = math.sqrt(xlm * xlm + ylm * ylm)
#转换数据类型
le = int(le)
#画圆
cv2.circle(img, (ix, iy), le, color, 8)
#两点法画矩形
#右键单击,画第一个点
if event == cv2.EVENT_RBUTTONDOWN:
#n的作用:分开两个端点(起点和终点)
if n == 0: #第一次单击
n += 1
ix, iy = x, y
#画第一个端点(起点)
cv2.circle(img, (x, y), 2, color, -1)
else: #第二次单击
n = 0
#根据第一个端点和第二个点画矩形
cv2.rectangle(img, (ix, iy), (x, y), color, 5)
增加滑动条,并用来控制画笔颜色
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)
color = (b,g,r)
#以下代码加入自定义函数
r = cv2.getTrackbarPos('R', 'image')
g = cv2.getTrackbarPos('G', 'image')
b = cv2.getTrackbarPos('B', 'image')
#img[:] = [b, g, r]
设置白色image
img[:] = 255
img.fill(255)
#两种方法任选一种
整体代码
import cv2
import numpy as np
import math
def nothing (x) :
pass
n = 0
ix, iy = -1, -1
xl, yl, l = 0, 0, 0
#创建回调函数
def onMouse(event, x, y, flags, param):
#获取滑动条R,G,B值
r = cv2.getTrackbarPos('R', 'image')
g = cv2.getTrackbarPos('G', 'image')
b = cv2.getTrackbarPos('B', 'image')
color = (b, g, r)
global ix, iy, n
#左键拖拽时记录起始坐标
if event == cv2.EVENT_FLAG_LBUTTON:
ix, iy = x, y
#当鼠标松开左键时停止绘画
#通过圆心和半径拖拽法画圆
if event == cv2.EVENT_LBUTTONUP:
#计算半径的长度
xlm = (x - ix)
ylm = (y - iy)
le = math.sqrt(xlm * xlm + ylm * ylm)
#转换数据类型
le = int(le)
#画圆
cv2.circle(img, (ix, iy), le, color, 8)
#两点法画矩形
#右键单击,画第一个点
if event == cv2.EVENT_RBUTTONDOWN:
if n == 0:
n += 1
ix, iy = x, y
#画第一个端点
cv2.circle(img, (x, y), 2, color, -1)
else:
n = 0
#根据第一个端点和第二个点画矩形
cv2.rectangle(img, (ix, iy), (x, y), color, 5)
#可调整image大小
img = np.zeros((512, 1000, 3), np.uint8)
cv2.namedWindow('image')
#绘图颜色R,G,B
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)
cv2.setMouseCallback('image', onMouse)
# 把image改成白色
img[:] = 255
#img.fill(255)
while 1:
cv2.imshow('image', img)
k = cv2.waitKey(1) & 0XFF
if k == 27:
break
cv2.destroyAllWindows()