OpenCV第一天(图像、视频、鼠标与TrackBar的基本操作)

1. 图像的IO操作

1.1 读取图像

  • imread()
    参数:
    读取的图像
    读取方式的标志(可以为空)
    - cv.IMREADCOLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。
    - cv.IMREAD
    GRAYSCALE:以灰度模式加载图像
    - cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式
    注:可以使用1、0、-1代替上面三个标志
             import numpy as np
             import cv2 as cv
             # 以灰度图的形式读取图像
             img = cv.imread('img01.jpg',0)
    

注:若图片的路径错误,会返回一个None值

1.2 显示图像与关闭图像

  • imshow()
    参数:
    显示图像的窗口名称,以字符串类型表示
    待加载的图像
    注:当调用显示图像的接口后,同时要调用waitkey()给图像绘制留下时间,否则窗口会出现无法响应,图像则无法正常显示
 # opencv中显示
cv.imshow('image',img)
cv.waitKey(0)
  • namedWindow(winname, flags=None)
    参数:
    - 窗口名
    - 窗口属性
    WINDOW_NORMAL显示图像后,允许用户随意调整窗口大小
    WINDOW_AUTOSIZE根据图像大小显示窗口,不允许用户调整大小
    WINDOW_FREERATIO窗口大小自适应比例
    WINDOW_KEEPRATIO保持图像的比例
    注:显示图像时,此函数非必要可以不用,imshow()可直接创建并显示窗口,如若对窗口属性有限制,则需使用该窗口
  • waitKey():无限期地等待一个键事件或等待延迟毫秒,显示图像窗口时,必须使用waitKey()函数。在读取视频的循环while中,waitKey(n)的作用是逐帧显示视频帧,可以合理地选择n的大小,以缓和的速度播放视频。
    参数:
    waitKey()与waitKey(0),都代表无限等待
    waitKey(n),等待n毫秒后,关闭显示的窗口
    destroyAllWindows():销毁窗口,释放资源

1.3 保存图像

  • imwrite()
    参数:
    文件保存的路径
    所保存的图像名
 # testopencv.py
import cv2
cv2.namedWindow('new', cv2.WINDOW_AUTOSIZE) # 创建窗口('名字','窗口属性')
img = cv2.imread('D:/Py_learn/1.jpg') # 读取图片
cv2.imshow('new', img) # 图像的显示,也可以创建多个窗口
key = cv2.waitKey() # 等待时间,毫秒级,0表示任意键终止
while True:
    if (key & 0xFF == ord('q')):# ord获取AscII码
       break
    elif (key & 0xFF == ord('s')):
        cv2.imwrite("girl.jpg", img)
print(ord('q'))
cv2.destroyAllWindows() # 销毁窗口,释放资源

2. 视频操作

2.1 创建视频读取对象

  • VideoCapture(filepath)
    参数:
    视频文件的路径
    0自动获取设备摄像头采集视频

2.2 获取视频属性

  • get(proId)
    参数:
    - 0-18的数字,分别代表不同的视频属性
    常用属性:
    在这里插入图片描述

2.3 修改视频属性

  • set(propId, value)
    参数:
    - proId,0-18的数字,分别代表不同的视频属性
    - value,修改后的属性值

2.4 判断图像是否读取成功

  • x.isOpened()
    如成功返回True,否则返回False,获取视频的一帧图像
    • ret, frame = x.read()
      参数:
      - ret:若获取成功返回True,否则False
      - Frame:获取到的某一帧的图像
  • 释放视频对象资源
    release()
import numpy as np
import cv2 as cv
# 1.获取视频对象
cap = cv.VideoCapture('img/01.mp4')
# 2.判断是否读取成功
while(cap.isOpened()):
    # 3.获取每一帧图像
    #ret: 若获取成功返回True,获取失败,返回False 
    #Frame: 获取到的某一帧的图像
    ret, frame = cap.read() 
    # 4. 获取成功显示图像
    if ret == True:
        cv.imshow('frame',frame)
    # 5.每一帧间隔为25ms
    if cv.waitKey(25) & 0xFF == ord('q'):
        break
# 6.释放视频对象
cap.release()
cv.destroyAllwindows()

2.5 创建视频保存对象

  • VideoWriter(filename,fourcc, fps, frameSize)
    参数:
    filename:视频保存的位置
    fourcc:指定视频解码器的4字节代码
    fps:视频帧率
    frameSize:帧大小
    设置视频的解码器:
    • VideoWriter_fourcc( c1, c2, c3, c4 )
      参数:
      c1,c2,c3,c4: 是视频编解码器的4字节代码,常用的有:
      Winows中:DIVX(.avi)
      Os中:MJPG(.mp4), DIVX(.avi), X264(.mkv)
import cv2 as cv
   
  # 1. 读取视频
  cap = cv.VideoCapture("img/01.mp4")
   
  # 2. 获取图像的属性(宽和高),并将其转换为整数
  frame_width = int(cap.get(3))
  frame_height = int(cap.get(4))
   
  # 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
  out = cv.VideoWriter('outpy.avi', cv.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))
  while (True):
      # 4.获取视频中的每一帧图像
      ret, frame = cap.read()
      if ret == True:
          # 5.将每一帧图像写入到输出文件中
          out.write(frame)
      else:
          break
   
  # 6.释放资源
  cap.release()
  out.release()
  cv.destroyAllWindows()

3. OpenCv对鼠标的控制

3.1 设置鼠标回调函数

  • setMouseCallback(winname, callback, userdata)
    参数:
    winname:窗口名字
    userdata:传给回调函数的参数,默认None
    callback:鼠标响应函数,回调
    函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为
    • void onMouse(int event, int x, int y, int flags, void* param)
      event:鼠标动作,0-9不同的数值对应不同的操作。
      event的操作属性
      flags:鼠标动作标志符,不同的数字对应不同的事件
      在这里插入图片描述
# mouse.py
import cv2
import numpy as np
# 设置鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
    print(event, x, y, flags, userdata)

# 创建窗口
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 & 0xFF == ord('q'):
         break
 cv2.destroyAllWindows()

4. TrackBar控件

4.1 滚动条的创建

  • createTrackbar( trackbarname, winname,int value, int count,TrackbarCallback onChange = 0,void userdata = None)
    参数:
    trackbarname:滚动条的名字
    winname:绑定的窗口名字
    value:滑块的初始位置
    count:滑块的最大位置
    TrackbarCallback:回调函数,拨动Trackbar返回的函数
    userdata:用户传给回调函数的数据,默认为None
    • 回调函数的定义:
      def callbackfunc(int value, void* userdata);
      参数:
      value传入的是滑块位置变量。
      userdata是打包的其他数据。可以不传参

4.2 设置滚动条属性

  • setTrackbarPos(trackbarname, winname, int pos)
    参数:
    trackbarname:滚动条的名字
    winname:绑定的窗口名字
    pos:返回Trackbar的属性
     # trackBar.py
     import cv2
     import numpy as np
     def callback():
         pass
     # 创建窗口
     cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
     
     # 创建tracker
     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, 360, 3), np.uint8)
     while True:
         # 获取当前trackbar的值
         r = cv2.getTrackbarPos('R', 'trackbar')
         g = cv2.getTrackbarPos('G', 'trackbar')
         b = cv2.getTrackbarPos('B', 'trackbar')
         # 改变图片的背景颜色
         img[:] = [b, g, r]
         cv2.imshow('trackbar', img)
         key = cv2.waitKey(10)
         if key & 0xFF == ord('q'):
             break
     cv2.destroyAllWindows()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值