简体   繁体   English

使用带有 OpenCV 和 Python 的范围滑块(轨迹条)创建蒙版图像

[英]Creating a mask image using range sliders (trackbars) with OpenCV and Python

I have written the following program as I am going through a tutorial on OpenCV and Python.在阅读有关 OpenCV 和 Python 的教程时,我编写了以下程序。

What am i doing wrong or missing that my mask window does not display the HSV image changing based on the slider (trackbar) values?我做错了什么或错过了我的面具 window 不显示基于 slider (轨迹栏)值更改的 HSV 图像?

import cv2
import numpy as np

def empty(i):
    pass

path = "resources/Lena.tiff"
cv2.namedWindow("TrackedBars")
cv2.resizeWindow("TrackedBars", 640, 240)

cv2.createTrackbar("Hue Min", "TrackedBars", 0, 179, empty)
cv2.createTrackbar("Hue Max", "TrackedBars", 179, 179, empty)
cv2.createTrackbar("Sat Min", "TrackedBars", 0, 255, empty)
cv2.createTrackbar("Sat Max", "TrackedBars", 255, 255, empty)
cv2.createTrackbar("Val Min", "TrackedBars", 0, 255, empty)
cv2.createTrackbar("Val Max", "TrackedBars", 255, 255, empty)

img = cv2.imread(path)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

hue_min = cv2.getTrackbarPos("Hue Min", "TrackedBars")
hue_max = cv2.getTrackbarPos("Hue Max", "TrackedBars")
sat_min = cv2.getTrackbarPos("Sat Min", "TrackedBars")
sat_max = cv2.getTrackbarPos("Sat Max", "TrackedBars")
val_min = cv2.getTrackbarPos("Val Min", "TrackedBars")
val_max = cv2.getTrackbarPos("Val Max", "TrackedBars")

lower = np.array([hue_min, sat_min, val_min])
upper = np.array([hue_max, sat_max, val_max])
imgMASK = cv2.inRange(imgHSV, lower, upper)

cv2.imshow("Output1", img)
cv2.imshow("Output2", imgHSV)
cv2.imshow("Mask", imgMASK)

cv2.waitKey(0)

You did not define a callback function so results never update with sliders.您没有定义回调 function 因此结果永远不会随滑块更新。 Also because of initial values the output mask image is white.也因为初始值,output 掩码图像是白色的。 Here is an easy trackbar tutorial,这是一个简单的轨迹栏教程,

https://docs.opencv.org/4.5.0/da/d6a/tutorial_trackbar.html https://docs.opencv.org/4.5.0/da/d6a/tutorial_trackbar.html

在此处输入图像描述

Code:代码:

import cv2
import numpy as np

def empty(i):
    pass

path = "resources/27.jpg"
cv2.namedWindow("TrackedBars")
cv2.resizeWindow("TrackedBars", 640, 240)


def on_trackbar(val):
    hue_min = cv2.getTrackbarPos("Hue Min", "TrackedBars")
    hue_max = cv2.getTrackbarPos("Hue Max", "TrackedBars")
    sat_min = cv2.getTrackbarPos("Sat Min", "TrackedBars")
    sat_max = cv2.getTrackbarPos("Sat Max", "TrackedBars")
    val_min = cv2.getTrackbarPos("Val Min", "TrackedBars")
    val_max = cv2.getTrackbarPos("Val Max", "TrackedBars")

    lower = np.array([hue_min, sat_min, val_min])
    upper = np.array([hue_max, sat_max, val_max])

    imgMASK = cv2.inRange(imgHSV, lower, upper)

    cv2.imshow("Output1", img)
    cv2.imshow("Output2", imgHSV)
    cv2.imshow("Mask", imgMASK)


cv2.createTrackbar("Hue Min", "TrackedBars", 0, 179, on_trackbar)
cv2.createTrackbar("Hue Max", "TrackedBars", 179, 179, on_trackbar)
cv2.createTrackbar("Sat Min", "TrackedBars", 0, 255, on_trackbar)
cv2.createTrackbar("Sat Max", "TrackedBars", 255, 255, on_trackbar)
cv2.createTrackbar("Val Min", "TrackedBars", 0, 255, on_trackbar)
cv2.createTrackbar("Val Max", "TrackedBars", 255, 255, on_trackbar)

img = cv2.imread(path)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# Show some stuff
on_trackbar(0)
# Wait until user press some key
cv2.waitKey()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM