美文网首页
python-opencv

python-opencv

作者: 阿瑟琴 | 来源:发表于2018-11-24 11:21 被阅读0次

    python 3.6.2
    cv2

    〇、tips

    • np array 表示的是矩阵,下标第一唯是行号,对应y坐标,第二唯是列号,对应x坐标。cv对图像做操作时,则是按照空间关系(x,y)

    一、基本GUI

    1. 窗口
    2. 交互事件

    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. 绘制基本图形
    2. 绘制文字(不支持汉字?)

    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)
    

    五、简单数学函数

    以后更新

    相关文章

      网友评论

          本文标题:python-opencv

          本文链接:https://www.haomeiwen.com/subject/hweeqqtx.html