opencv:读取图像和视频以及鼠标 *** 作

opencv:读取图像和视频以及鼠标 *** 作,第1张

文章目录

    • 一、opencv安装


    • 二、窗口的创建和销毁


    • 三、图片的读取和加载


    • 四、视频的读取和加载


    • 五、鼠标 *** 作


一、opencv安装

pip install opencv-python

扩展包 可选可不选

pip install opencv-contrib-python

二、窗口的创建和销毁

  • cv2.namedWindow(winname,[flags]):
    创建命名窗口。



    winname:窗口名字
    flags:可选,调节窗口大小 自动/默认。


    WINDOW_AUTOSIZE/ WINDOW_NORMAL

  • cv2.resizeWindow(winname, width, height)
    调节窗口名为winname的长和宽
  • cv2.imshow(‘window’,0)
    显示窗口
  • destroyAllWindows()
    摧毁窗口
  • waitKey()
    等待用户输入 一般配合保存或者关闭 *** 作

例如:

# 导包
import cv2
# 创建窗口
cv2.namedWindow('window',cv2.WINDOW_NORMAL)
# 更改窗口大小
cv2.resizeWindow('window',400,420)
# 展示名字为window的窗口
cv2.imshow('window',0)
# 等待按键 关闭 
# 会返回按键的ASCII
# 0:接受所有按键 整数:等待ms数
key=cv2.waitKey()
# 按q退出
# ord():返回字符的ASCII码值
# key:int型 最少16位  ASCII码8位  key&0xFF 相当于取出前8位(低位) 按位与
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()


创建了黑窗口 啥也没有


三、图片的读取和加载

1、读图片

  • cv2.imread(filename,[flags])
    读取图片 filename:为图片的路径名 绝对路径和相对路径都可。



    它读出来的是矩阵 ndarray格式

    注意:opencv读取图片颜色通道默认是 GBR,

2、加载图片
cv2.imshow(filename):上面演示过了

例:lover =cv2.imread(’./img/jing_1.png’)

lover =cv2.imread('./img/jing_1.png')
# 使用opencv方式去展示
cv2.imshow('lover',lover)
key=cv2.waitKey()
if key & 0xFF == ord('q'):
    cv2.destroyAllWindows()

3、保存图片
cv2.imwrite(path,name)
以文件名为name保存到path路径下

# imwrite(path,name) 保存图片
import cv2
#创建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',400,405)
img =cv2.imread('./img/jing_1.png')

while True:
    cv2.imshow('img',img)
    key=cv2.waitKey(0)
    if key==ord('q'):
        break
    elif key==ord('s'):
        cv2.imwrite('./img/jing_3.jpg',img)
cv2.destroyAllWindows()

四、视频的读取和加载

1、读视频
cv2.VideoCapture(filename)
filename为视频的路径名,支持MP4 AVI 格式

读取视频本质就是一帧一帧读取图片。



所以循环读取摄像头的每一帧

#循环读取摄像头的每一帧
while True:
    ret,frame=cap.read()
    if not ret:
        #没读到数据直接退出
        break
    #显示数据
    cv2.imshow('video',frame)

完整代码

# 打开摄像头
import cv2
cv2.namedWindow('video',cv2.WINDOW_NORMAL)
cv2.resizeWindow('video',400,450)
#cap=cv2.VideoCapture(0)
#打开视频 输入当前视频的地址
cap=cv2.VideoCapture('./video/vippedtracking.mp4')

#循环读取摄像头的每一帧
while True:
    ret,frame=cap.read()
    if not ret:
        #没读到数据直接退出
        break
    #显示数据
    cv2.imshow('video',frame)
    #每割10ms等待
    key=cv2.waitKey(10)
    if key & 0xFF==ord('q'):
        break
#释放资源
cap.release()
cv2.destroyAllWindows()

2、拍视频

  • cv2.VideoWriter_fourcc(*‘mp4v’)
    返回值为一个视频压缩格式
  • cv2.VideoWriter(‘filename’,fourcc,FPS,(width,height))
    FPS:帧率
    返回值的write方法就可以用来”写视频“

例:

import cv2
cap=cv2.VideoCapture(0)
fourcc=cv2.VideoWriter_fourcc(*'mp4v')
# 20:帧率
# 注意:拍视频分辨率一定要为640 480
#创建VideoWriter
vw=cv2.VideoWriter('output.mp4',fourcc,20,(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()

五、鼠标 *** 作

  • cv2.setMouseCallback(‘mouse’,callbackFunction,window)
    给窗口window添加鼠标回调函数
    callbackFunction:为自定义的回调函数
  • callbackFunciton(event,x,y,flags,userdata)
    名字可以随意起,但是参数必须有五个
    event:事件名;
    x,y:坐标;
    flags:鼠标的组合按键;
    userdata:传给用户的数据
import cv2
import numpy as np
# 参数必须是五个
# event:鼠标事件
# x y 发生鼠标事件的坐标
# flags 鼠标的组合按键
# userdata:传给用户的数据
def mouse_callback(event,x,y,flags,userdata):

#创建窗口
cv2.namedWindow('mouse',cv2.WINDOW_NORMAL)
cv2.resizeWindow('mouse',400,450)
#绑定鼠标的回调函数
# lover为上面的图片窗口
cv2.setMouseCallback('mouse','mouse_callback','lover')

#生成全黑的图片
img=np.zeros((450,400,3),np.uint8)
while True:
    cv2.imshow('mouse',img)
    key=cv2.waitKey(1)
    if key == ord('q')
        break
cv2.destroyAllWindows()

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存