前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作

OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作

作者头像
Rattenking
发布2022-10-24 15:59:58
8790
发布2022-10-24 15:59:58
举报
文章被收录于专栏:Rattenking

1. 知识点

  1. cv.namedWindow() 创建一个窗口;
  2. cv.createTrackbar() 创建一个轨迹栏;
  3. cv.getTrackbarPos() 获取对应轨迹栏的轨迹位置;
  4. cv.waitKey() 键盘操作返回对应的key。

2. cv.namedWindow() 函数说明

  1. 函数使用
代码语言:javascript
复制
cv.namedWindow(winname, flags=None)
  1. 参数说明

参数

说明

winname

表示创建窗口的名称。

flags

表示创建的窗口类型。

  1. flags 说明

说明

WINDOW_NORMAL

表示显示图像后,允许用户随意调整窗口大小。

WINDOW_AUTOSIZE

表示根据图像大小显示窗口,不允许用户调整大小。

WINDOW_KEEPRATIO

表示保持图像的比例。

3. cv.createTrackbar() 函数说明

  1. 函数使用
代码语言:javascript
复制
cv.createTrackbar(trackbarname, winname, value, count, trackbarcallback, userdata)
  1. 参数说明

参数

说明

trackbarname

表示轨迹栏的名称。

winname

表示附加到的窗口名称。

value

一个指向整形的指针, 表示滑块的位置。 创建时,滑块的初始位置就是该变量当前的值。

count

表示滑块可以达到的最大位置的值。 滑块最小位置的值始终为0。

trackbarcallback

表示执行的回调函数每次跟踪栏值更改。【回调函数始终具有默认参数,即轨迹栏位置。】

userdata

表示默认值0。这个参数是用户传递给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value是全局变量,完全可以不去管这个userdata参数。

  1. trackbarcallback回调流程

4. cv.getTrackbarPos() 函数说明

  1. 函数使用
代码语言:javascript
复制
cv.getTrackbarPos(trackbarname, winname)
  1. 参数说明

参数

说明

trackbarname

表示轨迹栏的名称。

winname

表示轨迹栏依托窗口的名称。

5. cv.waitKey() 函数说明

  1. 函数使用
代码语言:javascript
复制
cv.waitKey(delay=0)
  1. 参数说明

参数

说明

delay

表示阻塞指定毫秒数。

  1. delay 值说明

说明

0或者不填写

表示一直阻塞。

大于0

表示阻塞指定毫秒数。

  1. 注意

该函数的返回值,在不同的操作系统中可能会有差异。

6. cv.imshow() 函数说明

  1. 函数使用
代码语言:javascript
复制
cv.imshow(winname, mat)
  1. 参数说明

参数

说明

winname

表示需要显示图像的窗口名称。

mat

表示需要显示的图像。

7. 调整图像的亮度

7.1 分析
  1. RGB 表示图像的亮度;
  2. RGB 的取值范围(0,0,0)-(255,255,255);
  3. 图像像素运算可以改变 RGB 的值。
7.2 代码实现
代码语言:javascript
复制
import cv2 as cv
import numpy as np

# 回调函数
def trackbarcallback(value):
  print(value)
  pass

def adjust_brightness_demo():
  # 读取图片
  img = cv.imread('./images/butterfly.jpg')

  # 复制一个用于修改合并的图片
  img_copy = np.zeros_like(img)

  # 创建一个名为 adjust_brightness 的窗口
  cv.namedWindow('adjust_brightness')

  # 创建一个名为 progress 的轨迹栏,将其依托到 adjust_brightness 窗口
  cv.createTrackbar('progress', 'adjust_brightness', 0, 100, trackbarcallback)

  # 循环获取轨迹栏的值
  while 1:
    # 将图像 img_copy 显示到 adjust_brightness 窗口
    cv.imshow('adjust_brightness', img_copy)

    # 每10毫秒 获取键盘操作值,如果是 【ESC】 退出循环
    key = cv.waitKey(10)
    if key == 27:
      break

    # 获取 adjust_brightness 窗口中 progress 轨迹栏的位置
    value = cv.getTrackbarPos('progress', 'adjust_brightness')

    # 将轨迹栏的位置值转换为OpenCV图像值
    value = np.uint8(value)

    # 修改复制图片的像素值
    img_copy[:] = (value, value, value)

    # 使用像素运算中的加法,增减亮度
    img_copy = cv.add(img, img_copy)

  # 销毁全部窗口
  cv.destroyAllWindows()


if __name__ == "__main__":
  adjust_brightness_demo()
7.3 实现结果
7.4 注意
  1. np.zeros_like 只是生成了一个和img图像一致的矩阵,但是值都是0,因此循环第一次显示的图像是黑色;
  2. 由于10毫秒的阻塞,肉眼观察不到,没有进行操作,因此执行了cv.add将黑色图片和原图进行了加法计算,所以最后肉眼看到的是显示原图。

8. 键盘响应进行不同操作

8.1 分析
  1. 监听键盘的操作值,cv.waitKey
  2. 【按1】显示 HSV 图像;
  3. 【按2】显示 YCrCb 图像;
  4. 【按3】显示 RGB 图像;
  5. 【按0】显示 BGR 图像;
8.2 代码实现
代码语言:javascript
复制
import cv2 as cv
import numpy as np

def handle_key():
  # 读取图片
  img = cv.imread('./images/butterfly.jpg')

  # 复制一个 img 用于转换的矩阵
  img_copy = cv.add(img, np.zeros_like(img))

  # 创建一个名为 waitkey 的窗口
  cv.namedWindow('waitkey')

  while 1:
    # 将图像 img_copy 显示到 waitkey 窗口
    cv.imshow('waitkey', img_copy)

    # 每10毫秒 获取键盘操作值
    key = cv.waitKey(10)
    if key == 27:
      break
    # 按0
    elif key == 48:
      img_copy = img
    # 按1
    elif key == 49:
      img_copy = cv.cvtColor(img, cv.COLOR_BGR2HSV)
    # 按2
    elif key == 50:
      img_copy = cv.cvtColor(img, cv.COLOR_BGR2YCrCb)
    # 按3
    elif key == 51:
      img_copy = cv.cvtColor(img, cv.COLOR_BGR2RGB)
  # 销毁窗口
  cv.destroyAllWindows()

if __name__ == "__main__":
  handle_key()
8.3 实现结果

9. 总结

  1. cv.createTrackbar() 的回调是必填参数,不填写会报错;
代码语言:javascript
复制
TypeError: function takes exactly 5 arguments (4 given)
  1. cv.getTrackbarPos() 获取对应窗口中对应轨迹栏的当前值;
  2. cv.imshow() 用于在指定的窗口中显示图像;
  3. cv.waitKey() 表示阻塞指定毫秒数。如果0或者不填写表示一直阻塞
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 知识点
  • 2. cv.namedWindow() 函数说明
  • 3. cv.createTrackbar() 函数说明
  • 4. cv.getTrackbarPos() 函数说明
  • 5. cv.waitKey() 函数说明
  • 6. cv.imshow() 函数说明
  • 7. 调整图像的亮度
    • 7.1 分析
      • 7.2 代码实现
        • 7.3 实现结果
          • 7.4 注意
          • 8. 键盘响应进行不同操作
            • 8.1 分析
              • 8.2 代码实现
                • 8.3 实现结果
                • 9. 总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档