使用opencv python编写“用滑动条做调色板”

使用opencv python编写“用滑动条做调色板”

python代码

import cv2
import numpy as np 
def nothing(x):
    pass

ix=-1
iy=-1
drawing=False
mode=ord('l')
def draw(event,x,y,flag,param):
    r=cv2.getTrackbarPos('R','image')           #在'image'窗口中获取名为'R'的trackbar的值
    g=cv2.getTrackbarPos('G','image')           #在'image'窗口中获取名为'G'的trackbar的值
    b=cv2.getTrackbarPos('B','image')           #在'image'窗口中获取名为'B'的trackbar的值
    color=(b,g,r)                               #根据trackbar的值确定颜色
    global ix,iy,drawing,mode                   #ix,iy为鼠标初始坐标点,drawing为是否画的标志位,mode为确定所画形状
    if event==cv2.EVENT_FLAG_LBUTTON:           #当鼠标左键按下,开始绘画,获得鼠标的初始点
        drawing=True
        ix,iy=x,y
    elif event==cv2.EVENT_MOUSEMOVE and flag==cv2.EVENT_FLAG_LBUTTON:#当鼠标左键按下且鼠标移动,开始绘画具体的形状
        if drawing ==True:
            if mode == ord('l'):                #当键盘按下'l',在鼠标处画一个小圆,移动鼠标,就画出了直线
                cv2.circle(img,(x,y),3,color,-1)
            elif mode== ord('r'):               #当键盘按下'r',以鼠标初始点为左上角,终点为右下角,画矩形
                cv2.rectangle(img,(ix,iy),(x,y),color,-1)
            elif mode==ord('c'):                #当键盘按下'c',以鼠标初始点为圆心,到终点的距离为半径,画圆
                radius=int(np.sqrt((x-ix)**2+(y-iy)**2))
                cv2.circle(img,(ix,iy),radius,color,-1)
    elif event==cv2.EVENT_LBUTTONUP:            #当鼠标左键松开时,停止绘画
        drawing=False
img=np.zeros([248,248,3],dtype=np.uint8)        #使用numpy的zeros()函数创建一张黑色的画布,Size为(248,248,3)
cv2.namedWindow('image',cv2.WINDOW_NORMAL)      #无论是Mousecallback还是trackbar,还是imshow(),都与window息息相关,因此要创建一个window,可以调整window的大小
cv2.createTrackbar('R','image',0,255,nothing)   #创建一个Trackbar,名字为'R',放在名为'image'的Trackbar中,范围为0-255,trackbar也需要回调函数,这里回调函数不需要完成什么,所以创建了一个nothing回调函数
cv2.createTrackbar('G','image',0,255,nothing)   #创建一个Trackbar,名字为'G',放在名为'image'的Trackbar中,范围为0-255
cv2.createTrackbar('B','image',0,255,nothing)   #创建一个Trackbar,名字为'B',放在名为'image'的Trackbar中,范围为0-255

while True:
    cv2.imshow('image',img)                     #显示图片
    k=cv2.waitKey(1)
    if k==ord('r'):                             #当键盘按下r,mode切换为画矩形
        mode=ord('r')
    elif k==ord('c'):                           #当键盘按下c,mode切换为画圆
        mode=ord('c')
    elif k==ord('l'):                           #当键盘按下l,mode切换为画线
        mode=ord('l')
    elif k==ord('w'):                           #当键盘按下w,保存图片
        cv2.imwrite('/home/xhsheng/文档/opencv_learn/用滑动条做调色板/myTrackbar_draw.jpg',img)
    elif k==ord('q'):                           #当键盘按下q,退出while循环
        break
cv2.destroyAllWindows()                         #记得程序结束后,清除所有window


运行结果

result
保存图片

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值