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

在这里插入图片描述

原文地址:https://www.cnblogs.com/hhsxy/p/14018405.html