zoukankan      html  css  js  c++  java
  • opencv 绘图函数,页面比对, cv2

    """
    python-opencv绘图函数(cv2.line(), cv2.circle(), cv2.rectangle(),cv2.ellipse() cv2. cv2.putText() )

    第一章3 opencv绘图函数
    主要有cv2.line()//画线, cv2.circle()//画圆, cv2.rectangle()//长方形,cv2.ellipse()//椭圆, cv2.putText()//文字绘制

    主要参数

    img:源图像

    color:需要传入的颜色

    thickness:线条的粗细,默认值是1

    linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑。


    1.画线
    .画线----设置起点和终点,颜色,线条宽度
    # 创建一个图像,300*400大小,数据类型无符号8位

    """
    img=np.zeros((300,400,3),np.uint8)
    cv2.line(img,(10,10),(200,200),(0,255,0),3) # 绿色 三个像素宽度

    """
    2、画矩形
    矩形——设置左上顶点和右下顶点,颜色,线条宽度
    """

    cv2.rectangle(img,(10,10),(30,40),(134,2,34),1)

    """

    3、画圆
    圆——指定圆心和半径
    """
    cv2.circle(img,(60,60),30,(0,0,213),-1)


    """

    4、椭圆
    画椭圆——需要输入中心点位置,长轴和短轴的长度,椭圆沿逆时针选择角度,椭圆沿顺时针方向起始角度和结束角度
    """

    cv2.ellipse(img,(256,256),(100,50),0,0,180,(20,213,79),-1) # 线型 -1表示填充
    """
    5、多边形
    画多边形——需要指定每个顶点的坐标

    """
    import numpy as np
    pts=np.array([[10,3],[48,19],[60,3],[98,19]],np.int32) # 数据类型必须是int32
    pts=pts.reshape((-1,1,2))
    '''
    这里reshape的第一个参数为 -1,表明这一维的长度是根据后面的维度计算出来.
    如果第三个参数是 False, 我们得到的多边形是不闭合的(首位不相连)
    '''
    cv2.polylines(img,[pts],True,(0,0,255),1) # 图像,点集,是否闭合,颜色,线条粗细

    """

    6、添加文字
    设置参数——绘制的文字,位置,字型,字体大小,文字颜色,线型


    """
    font=cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(img,'OpenCV',(80,90),font,2,(255,255,255),3)


    """

    7、用鼠标绘制图形
    opencv鼠标处理事件
    cv2.setMouseCallback() 函数
    鼠标事件如下
    标志 数值 含义
    cv2.EVENT_MOUSEMOVE 0 鼠标移动
    cv2.EVENT_LBUTTONDOWN 1 左键单击
    cv2.EVENT_RBUTTONDOWN 2 右键单击
    cv2.EVENT_MBUTTONDOWN 3 中键单击
    cv2.EVENT_LBUTTONUP 4 左键释放
    cv2.EVENT_RBUTTONUP 5 右键释放
    cv2.EVENT_MBUTTONUP 6 中键释放
    cv2.EVENT_LBUTTONDBLCLK 7 左键双击
    cv2.EVENT_RBUTTONDBLCLK 8 右键双击
    cv2.EVENT_MBUTTONDBLCLK 9 中键双击

    鼠标事件标志:

    标志 数值 含义
    cv2.EVENT_FLAG_LBUTTON 1 鼠标左键按下状态
    cv2.EVENT_FLAG_RBUTTON 2 鼠标右键按下状态
    cv2.EVENT_FlAG_MBUTTON 4 鼠标中键按下状态
    cv2.EVENT_FLAG_CTRLKEY 8 指示CTRL键按下状态
    cv2.EVENT_FLAG_SHIFTKEY 16 指示SHIFT键按下状态
    cv2.EVENT_FLAG_ALTKEY 32 指示ALT键按下状态


    定义鼠标回调函数

    格式都是统一的,不同的是调用后的功能

    def your_mouse_callback(event,x,y,flags,param):

    定义完成后需要注册该回调函数

    cv2.setMouseCallback(windowName,your_mouse_callback)

    示例——鼠标双击画圆

    """
    import cv2
    import numpy as np
    def CircleCabllback(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDBLCLK:
    cv2.circle(img,(x,y),50,(76,201,255),1)
    print('圆心坐标x=: {0},y=:{1}.format(x,y)')
    img = cv2.imread('empire.jpg',1)
    print(img.dtype)
    c2.namedWindow('mouse_callback',img)

    c2.setMouseCallback('mouse_callback',CircleCallback)

    while(True) :
    cv2.imshow('mouse_callback',img)
    # 这里要注意cv2.waitKey() 里面等待时间不要写0,否则画面不刷新,切记
    if cv2.waitKey(10)&0*FF==ord('q'):

    cv2.destoryAllWindows()


    """
    拖动画矩形或者鼠标移动轨迹

    检测鼠标是否按下,按下后确定初始点(ix,iy),鼠标按下状态绘制鼠标轨迹,松开后绘制矩形

    """

    import cv2
    import numpy as np


    drawing = False # 鼠标未按下时不绘制
    mode = True # true时绘制矩形,按'm'变成绘制曲线
    ix, iy = -1, -1

    # 定义鼠标回调函数


    def MouseCallback(event, x, y, flags, param):
    global ix, iy, drawing, mode
    # 按下左键确定鼠标起始位置
    if event == cv2.EVENT_LBUTTONDOWN:
    drawing = True
    ix, iy = x, y
    # 左键按下状态并且移动开始绘制
    elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
    if drawing is True:
    if mode is False:
    pass
    # cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), -1)
    else:
    # 默认开启绘制鼠标轨迹,按m取消
    cv2.circle(img, (x, y), 1, (255, 0, 0), -1)

    elif event == cv2.EVENT_LBUTTONUP:
    if drawing is True:
    if mode is True:
    cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 1)
    drawing = False


    img = cv2.imread('empire.jpg', 1)
    cv2.namedWindow('rectangle')
    cv2.setMouseCallback('rectangle', MouseCallback)
    while(True):
    cv2.imshow('rectangle', img)
    k = cv2.waitKey(20) & 0xFF
    if k == ord('m'):
    mode = not mode
    elif k == ord('q'):
    break

  • 相关阅读:
    后台数据显示在网页(通过ajax获取内容)二
    获取后台数据显示在网页(一)
    访问后台方法
    input的placeholder字体大小无法修改?
    cssText()
    flex属性值----弹性盒子布局
    多栏布局
    怎么在ng-repeat生成的元素上操作dom
    css实现一行文字居中,多行文字左对齐
    变形属性 transform
  • 原文地址:https://www.cnblogs.com/llx--20190411/p/15338153.html
Copyright © 2011-2022 走看看