opencv(一)

那又是这样啊,学了挺久,真正从头学一遍,就当是缕一遍,用一遍吧,回头还能复习呐

图片入门

好习惯,添加
在这里cv.waitKey(0)###按任意键退出
cv.destroyAllWindows()   #摧毁所有窗口,清理缓存

读取图片 imread(“路径”,1或者0)#1是彩色,0是灰色
显示图片 imshow(figure,img)
保存图片 imwrite(文件名,文件)
如果想要指定窗口大小,就要提前规定figure

cv.namedWindow('image', cv.WINDOW_NORMAL)

也可以使用plt库显示图片
plt.imshow(img)


图片入门

打开摄像头
cap=cv.videocapture

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):#一般改为cap.isopen()根号吧
    # 一帧一帧捕捉
    ret, frame = cap.read()
    # 我们对帧的操作在这里
    #有人会加一句  , if ret 
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    # 显示返回的每帧
    cv.imshow('frame',gray)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
# 当所有事完成,释放 VideoCapture 对象
cap.release()
cv.destroyAllWindows()

我可以用 cap.get(cv.CAP_PROP_FRAME_WIDTH) 获得宽, cap.get(cv.CAP_PROP_FRAME_HEIGHT) 获得高。它返回的是 640x480,但是我想把它修改为 320x240。仅使用 ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320) 和 ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)

打开视频只需要更改上方的videocapture内参数

保存视频和摄像图的录像相比较保存图片还是有一丢丢难度的

import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 声明编码器和创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv.flip(frame,0)
        # 写入已经翻转好的帧
        out.write(frame)
        cv.imshow('frame',frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()

学习绘图

**cv.line(), **cv.circle() , cv.rectangle(), cv.ellipse(), cv.putText()
这些函数有几个共同参数

img:你想画的图片

color:形状的颜色,如 BGR,它是一个元组,例如:蓝色(255,0,0)。对于灰度图,只需传一个标量值。

thickness: 线或圆等的厚度。如果传 -1 就是像圆的闭合图形,它将填充形状。_ 默认 thickness = 1_

lineType:线条类型,如 8 连接,抗锯齿线等。默认情况下,它是 8 连接。**cv.LINE_AA** 画出抗锯齿线,非常好看的曲线。
##  调色板

```python
import numpy as np
import cv2 as cv
def nothing(x):
    pass
# 创建一个黑色图像,一个窗口
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# 创建一个改变颜色的轨迹栏
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# 创建一个开关用来启用和关闭功能的
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)
while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break
    # get current positions of four trackbars
    r = cv.getTrackbarPos('R','image')
    g = cv.getTrackbarPos('G','image')
    b = cv.getTrackbarPos('B','image')
    s = cv.getTrackbarPos(switch,'image')
    if s == 0:
        img[:] = 0
    else:
        img[:] = [b,g,r]
cv.destroyAllWindows()

鼠标作为画笔函数

关键是setmousecallback(figure,function)他自己会给function传入一个event给她使用

import numpy as np
import cv2 as cv
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):
    if event == cv.EVENT_LBUTTONDBLCLK:
        cv.circle(img,(x,y),100,(255,0,0),-1)
# 创建一个黑色图像,一个窗口,然后和回调绑定
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
    cv.imshow('image',img)
    if cv.waitKey(20) & 0xFF == 27:
        break
cv.destroyAllWindows()

高级例子

import numpy as np
import cv2 as cv
drawing = False # 如果 True 是鼠标按下
mode = True # 如果 True,画矩形,按下‘m’切换到曲线
ix,iy = -1,-1
# 鼠标回调函数
def draw_circle(event,x,y,flags,param):
    global ix,iy,drawing,mode
    if event == cv.EVENT_LBUTTONDOWN:
        drawing = True
        ix,iy = x,y
    elif event == cv.EVENT_MOUSEMOVE:
        if drawing == True:
            if mode == True:
                cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
            else:
                cv.circle(img,(x,y),5,(0,0,255),-1)
    elif event == cv.EVENT_LBUTTONUP:
        drawing = False
        if mode == True:
            cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
        else:
            cv.circle(img,(x,y),5,(0,0,255),-1)

你可能感兴趣的:(opencv,python)