zoukankan      html  css  js  c++  java
  • OpenCV——Python

    Pycharm批量注释:Ctrl+/
    01:
    读入、显示、保存图片

    import cv2
    import numpy as np
    
    img0 = cv2.imread("D:\test.png")#读取一张图片
    cv2.imshow("Image2",img0)#显示一张图片
    k = cv2.waitKey(0)
    if k == 27: # wait for ESC key to exit
        cv2.destroyAllWindows()
    elif k == ord('s'): # wait for 's' key to save and exit
        cv2.imwrite('D:\test001.png',img0)#保存图片
        cv2.destroyAllWindows()
    

    在这里插入图片描述

    02:
    读取视频
    为了获取视频,你应该创建一个 VideoCapture 对象。他的参数可以是设备的索引号,或者是一个视频文件。设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或者其他的来选择别的摄像头。之后,你就可以一帧一帧的捕获视频了。但是最后,别忘了停止捕获视频

    cap = cv2.VideoCapture(0)
    
    while(True):
        ret,frame=cap.read()
    
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    
        cv2.imshow('frame',gray)
        if cv2.waitKey(1)&0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destoryAllWindows()
    

    03:
    画几何图形

    import cv2
    import numpy as np
    
    img = cv2.imread("D:\test.png")
    
    cv2.line(img,(0,0),(511,511),(255,0,0),5)#起点坐标,终点坐标,颜色,线宽
    cv2.rectangle(img,(0,0),(510,128),(0,255,0),3)#左上坐标,右下坐标,颜色,线宽
    cv2.circle(img,(200,50),50,(255,0,255),5)#圆心坐标,半径,颜色,线宽(空心圆)
    cv2.circle(img,(300,50),50,(255,0,255),-1)#圆心坐标,半径,颜色,线宽=-1(实心圆)
    cv2.ellipse(img,(300,500),(50,100),10,0,360,(255,0,255),-1)#椭圆中心坐标,(a,b),旋转角度,缺少的角度,画的角度,颜色,线宽
    cv2.imshow("Image",img)
    cv2.waitKey(0)
    

    在这里插入图片描述

    03:
    在鼠标双击的位置画圆

    def draw_circle(event,x,y,flags,param):
        if event==cv2.EVENT_LBUTTONDBLCLK:
            cv2.circle(img,(x,y),100,(255,0,0),-1)
    # 创建图像与窗口并将窗口与回调函数绑定
    img=np.zeros((512,512,3),np.uint8)
    cv2.namedWindow('image')
    cv2.setMouseCallback('image',draw_circle)
    while(1):
        cv2.imshow('image',img)
        if cv2.waitKey(20)&0xFF==27:#等待ESC按下退出
            break
    cv2.destroyAllWindows()
    

    在这里插入图片描述
    03:
    m切换鼠标操作,画矩形或者划线

    import cv2
    import numpy as np
    
    # 当鼠标按下时变为 True
    drawing=False
    # 如果 mode 为 true 绘制矩形。按下'm' 变成绘制曲线。
    mode=True
    ix,iy=-1,-1
    # 创建回调函数
    def draw_circle(event,x,y,flags,param):
        global ix,iy,drawing,mode
    # 当按下左键是返回起始位置坐标
        if event==cv2.EVENT_LBUTTONDOWN:
            drawing=True
            ix,iy=x,y
    # 当鼠标左键按下并移动是绘制图形。 event 可以查看移动, flag 查看是否按下
        elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
            if drawing==True:
                if mode==True:
                    cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
                else:
        # 绘制圆圈,小圆点连在一起就成了线, 3 代表了笔画的粗细
                    cv2.circle(img,(x,y),3,(0,0,255),-1)
    # 下面注释掉的代码是起始点为圆心,起点到终点为半径的
    # r=int(np.sqrt((x-ix)**2+(y-iy)**2))
    # cv2.circle(img,(x,y),r,(0,0,255),-1)
    # 当鼠标松开停止绘画。
        elif event==cv2.EVENT_LBUTTONUP:
            drawing==False
    #       if mode==True:
    #           cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
    #       else:
    #           cv2.circle(img,(x,y),5,(0,0,255),-1)
    img=np.zeros((512,512,3),np.uint8)
    cv2.namedWindow('image')
    cv2.setMouseCallback('image',draw_circle)
    while(1):
        cv2.imshow('image',img)
        k=cv2.waitKey(1)&0xFF
        if k==ord('m'):
            mode=not mode
        elif k==27:
            break
    

    在这里插入图片描述

  • 相关阅读:
    【noiOJ】p1759
    【noiOJ】p1481
    【noiOJ】p6253
    【noiOJ】p1794
    【noiOJ】p1776
    【noiOJ】p8210
    【noiOJ】p7939
    【noiOJ】p7914(..)
    【noiOj】p8207(233)
    鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)
  • 原文地址:https://www.cnblogs.com/hhsxy/p/14018405.html
Copyright © 2011-2022 走看看