opencv学习笔记(一)图像的基本操作

学习视频很棒的视频,有需要的可以去看一下【不要再看那些过时的OpenCV老教程了】2022巨献,OpenCV零基础小白最新版全套教程(人工智能机器视觉教程)_哔哩哔哩_bilibili

一、图像视频的加载和显示

1、创建和显示窗口

# opencv名字将opencv但导入包的时候,叫cv2
import cv2
#创建窗口
#WINDOW_AUTOSIZE不允许修改窗口大小
#cv2.namedWindow('window',cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('window',cv2.WINDOW_NORMAL)
#更改窗口的大小
cv2.resizeWindow('window',800,600)
#展示名字为window的窗口
cv2.imshow('window',0)
#等待按键
#waitKey会返回按键的ASCII的值
#0表示为任意按键,如果给其他的整数,表示等待按键的时间,单位是毫秒
#可以利用waitKey来销毁窗口
key=cv2.waitKey(0)
if key==ord('q'):
    print("准备销毁窗口")
    cv2.destroyAllWindows()

2、加载显示图片

#将同一文件夹的图片th.jpg提取出出来
cat=cv2.imread('th.jpg')
#将cat图片显示在标题为cat的窗口中
cv2.imshow('tu',cat)

3、保存图片

import cv2
#创建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',640,480)

#读取图片
img=cv2.imread('./th.jpg')
while True:
    cv2.imshow('img',img)
    key=cv2.waitKey(0)
    
    if key==ord('q'):
        break
#保存图片
    elif key==ord('s'):
        cv2.imwrite('123.png',img)
    else:
        print(key)
cv2.destroyAllWindows()

4、视频采集--------摄像头的调用和播放视频

#视频就是一帧一帧的
import cv2
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',640,480)
#0为第几个摄像头,也可以改为1
#cap=cv2.VideoCapture(0)
#上面为打开摄像头,下面为播放视频
cap=cv2.VideoCapture('01.mp4')
#循环读取摄像头的每一帧
while True:
    #读一帧数据,返回标记和这一帧的数据,Teue表示读取到了数据,False则是没有读取到数据
    ret,frame=cap.read()
    
    #可以根据ret做判断
    if not ret:
        #没读到数据,直接退出
        break
        
    #显示数据
    cv2.imshow('video',frame)
    
    #10毫秒读取一帧,只能为整数
    key=cv2.waitKey(10)#10毫秒读取一帧,智能为整数
    if key==ord('q'):
        break
        
#别忘记释放资源
cap.release()
cv2.destroyAllWindows()

5、视频录制

# 视频录制
#创建VideoWriter为写多媒体文件
cap=cv2.VideoCapture(0)

#fourcc = cv2.VideoWriter_fourcc(*'mp4v')
fourcc = cv2.VideoWriter_fourcc(*'XVID')

#创建videoWreiter
#1280, 720录制不会成功,640,480也一样。保存的视频只会有1Kb
#(输出文件,多媒体文件格式,帧数,摄像头分辨率)
#vw = cv2.VideoWriter('./out.mp4', fourcc, 30, (640, 480))
vw = cv2.VideoWriter('./out.avi', fourcc, 30, (640, 480))

while cap.isOpened():
    ret,frame=cap.read()
    if not ret:
        break
        
    #写每一帧数据
    vw.write(frame)
    cv2.imshow('frame',frame)
    
    if cv2.waitKey(1)==ord('q'):
        break
    
#释放
#摄像头
cap.release()
#缓存内容写入磁盘, 并释放资源
vw.release()
#窗口
cv2.destroyAllWindows()

6、鼠标控制

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      #中键双击

flags 

EVENT_FLAG_LBUTTON 1       #左鍵拖曳  
EVENT_FLAG_RBUTTON 2       #右鍵拖曳  
EVENT_FLAG_MBUTTON 4       #中鍵拖曳  
EVENT_FLAG_CTRLKEY 8       #(8~15)按Ctrl不放事件  
EVENT_FLAG_SHIFTKEY 16     #(16~31)按Shift不放事件  
EVENT_FLAG_ALTKEY 32       #(32~39)按Alt不放事件   

import cv2
import numpy as np
#函数名可以随便取,但是参数必须是5个
#eventk表示鼠标事件,x,y是鼠标坐标,flags鼠标组合按键
def mouse_callback(event,x,y,falgs,userdata):
    print(event,x,y,falgs,userdata)
    if event==2:
        #在这里关掉了,后面又会马上打开
        cv2.destroyAllWindows()

#创建窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)

#宽,高
cv2.resizeWindow('mouse',640,360)

#设置鼠标回调函数
cv2.setMouseCallback('mouse',mouse_callback,'123')

#生成全黑的图片,与窗口宽高反过来
img=np.zeros((360,640,3),np.uint8)
while True:
    cv2.imshow('mouse',img)
    key=cv2.waitKey(1)
    if key==ord('q'):
        break
cv2.destroyAllWindows()

 7、trackbar控件(制作简单调色板)

#TrackBar的使用
import cv2
import numpy as np

#创建窗口
cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)
cv2.resizeWindow('trackbar',640,480)

#定义回调函数
def callback(value):
    print(value)
    pass
    
#创建3个trackbar
cv2.createTrackbar('R','trackbar',0,255,callback)
cv2.createTrackbar('G','trackbar',0,255,callback)
cv2.createTrackbar('B','trackbar',0,255,callback)

#创建图片
img=np.zeros((480,640,3),np.uint8)

while True:
    #获取当前trackbar的值
    r=cv2.getTrackbarPos('R','trackbar')
    g=cv2.getTrackbarPos('G','trackbar')
    b=cv2.getTrackbarPos('B','trackbar')
    
    #用获取到的三个值修改图片颜色
    #opencv中用的颜色是bgr
    img[:]=[b,g,r]
    cv2.imshow('trackbar',img)
    key=cv2.waitKey(1)
    if key==ord('q'):
        break

cv2.destroyAllWindows()

你可能感兴趣的:(计算机视觉,人工智能,计算机视觉,opencv,python)