【问题标题】:Python OpenCV Trackbar Error For cv2.getTrackbarPoscv2.getTrackbarPos 的 Python OpenCV Trackbar 错误
【发布时间】:2022-01-10 22:15:03
【问题描述】:

我正在尝试在 Windows 10 PC 上使用 Visual Studio Code 执行以下 Python 3.9.5 脚本:


import cv2
import numpy as np

frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(1)
cap.set(3, frameWidth)
cap.set(4, frameHeight)


def empty(a):
    pass

cv2.namedWindow("HSV")
cv2.resizeWindow("HSV", 640, 240)
cv2.createTrackbar("HUE MIN", "HSV", 0, 179, empty)
cv2.createTrackbar("HUE Max", "HSV", 129, 129, empty)
cv2.createTrackbar("SAT Min", "HSV", 0, 255, empty)
cv2.createTrackbar("SAT Max", "HSV", 255, 255 ,empty)
cv2.createTrackbar("VALUE Min", "HSV", 0, 255, empty)
cv2.createTrackbar("VALUE Max", "HSV", 255, 255, empty)

cap = cv2.VideoCapture('vid1.mp4')
frameCounter = 0

while True:
    frameCounter +=1
    if cap.get(cv2.CAP_PROP_FRAME_COUNT) == frameCounter:
        cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
        frameCounter=0

    _, img = cap.read()
    imgHsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    h_min = cv2.getTrackbarPos("HUE Min", "HSV")
    h_max = cv2.getTrackbarPos("HUE Max", "HSV")
    s_min = cv2.getTrackbarPos("SAT Min", "HSV")
    s_max = cv2.getTrackbarPos("SAT Max", "HSV")
    v_min = cv2.getTrackbarPos("VALUE Max", "HSV")
    v_max = cv2.getTrackbarPos("VALUE Max", "HSV")
    print(h_min)

    lower = np.array([h_min, s_min, v_min])
    upper = np.array([h_max, s_max, v_max])
    mask = cv2.inRange(imgHsv, lower, upper)
    result = cv2.bitwise_and(img, img, mask=mask)

    mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
    hstack = np.hstack([img, mask, result])
    cv2.imshow('Horizontal Stacking', hstack)
    if cv2.waitKey(1) and 0xFF == ord('q'):
        cv2.waitKey(0)

cap.release()
cv2.destroyAllWindows()

但是,在执行时,我收到以下错误:

[ WARN:0@0.229] global D:\a\opencv-python\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (539) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Traceback (most recent call last):
  File "c:...\ColorPickerScript.py", line 35, in <module>
    h_min = cv2.getTrackbarPos("HUE Min", "HSV")
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:862: error: (-215:Assertion failed) trackbar in function 'cv::getTrackbarPos'

我希望有人能指出正确的方向,以找出发生这种情况的原因以及我能做些什么来解决它。我还没有找到任何解决方案,谢谢!

【问题讨论】:

  • 你打错了。一个字符串中的全部大写字母,而不是另一个字符串。 - 我同意,这个断言是神秘的。随时在 opencv 的 github 上打开一个关于此的问题。问题是 trackbar(在 opencv 代码中)为 NULL,因为找不到具有给定名称的轨迹栏。指向此问题的上下文并在此处发布指向该问题的链接。
  • 你复制了错误的代码。 if cv2.waitKey(1) and 0xFF == ord('q'): 是错误的。 and 是一个布尔运算符,但它是按位运算符。只需删除整个and 0xFF,因为它是多余的。在waitKey 内部已经完成了同样的事情。您正在遵循古老的建议,或者老师是业余爱好者。

标签: python-3.x opencv visual-studio-code trackbar


【解决方案1】:

正如 Christoph Rackwitz 所指出的,问题在于我制作了一种类型,其中一个字符串全部大写,但没有另一个。更正此问题即可解决问题。

【讨论】:

  • 关于由错字引起的问题的问题是题外话。不要发布离题问题的答案,即使它们是你自己的。
  • 下次您应该尝试使用评论或编辑您的问题而不是答案来提供更多信息。
猜你喜欢
  • 2017-01-15
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
相关资源
最近更新 更多