opencv使用createTrackbar实时调节参数进行可视化

  1. 1、摘要

1、摘要

opencv提供了许多图像处理的算法或者api,如通过将BGR转为HSV颜色模型,然后通过设置相关阈值可以提取设定颜色区域,比如opencv-python掩膜操作进阶篇之颜色追踪中,通过设定阈值提取蓝色区域。如果有其他图片想提取某个颜色区域,但是我们并不知道这个颜色的阈值区间,只能通过不断尝试效果。

实际上opencv提供了cv2.createTrackbar()函数,先给出代码例子。

# -*- coding:utf-8 -*-

import cv2
import numpy as np

"""
功能:读取一张图片,显示出来,转化为HSV色彩空间
     并通过滑块调节HSV阈值,实时显示
"""

image = cv2.imread('val.jpeg')
image=cv2.resize(image,None,fx=0.5,fy=0.5)
cv2.imshow('original',image )

cv2.imshow("BGR", image)  # 显示图片

# 提取在这个区间表示的颜色
hsv_low = np.array([0, 0, 0])  # HSV三个分量的下限
hsv_high = np.array([0, 0, 0])  # HSV三个分量的上限


# 下面几个函数,写得有点冗余

def h_low(value):
    hsv_low[0] = value


def h_high(value):
    hsv_high[0] = value


def s_low(value):
    hsv_low[1] = value


def s_high(value):
    hsv_high[1] = value


def v_low(value):
    hsv_low[2] = value


def v_high(value):
    hsv_high[2] = value


cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE)

# H low:
#    0:指向整数变量的可选指针,该变量的值反映滑块的初始位置。
#  179:表示滑块可以达到的最大位置的值为179,最小位置始终为0。
# h_low:指向每次滑块更改位置时要调用的函数的指针,指针指向h_low元组,有默认值0。
cv2.createTrackbar('H low', 'image', 0, 179, h_low)
cv2.createTrackbar('H high', 'image', 0, 179, h_high)
cv2.createTrackbar('S low', 'image', 0, 255, s_low)
cv2.createTrackbar('S high', 'image', 0, 255, s_high)
cv2.createTrackbar('V low', 'image', 0, 255, v_low)
cv2.createTrackbar('V high', 'image', 0, 255, v_high)

while True:
    dst = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)  # BGR转HSV
    dst = cv2.inRange(dst, hsv_low, hsv_high)  # 根据设定的颜色区域提取图像部分区域
    cv2.imshow('dst', dst)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

可以看到在循环体中不断提取设定颜色区域,如果没有cv2.createTrackbar,显示的图片是没有变化的。但是通过cv2.createTrackbar的滑动条可以实时改变hsv_low, hsv_high两个值,从而实现实时效果的展示。

这里截图网图效果,可以看到它产生了三个滑动条,分别提取RGB分量:


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 ishyj@qq.com