我遇到了一个奇怪的问题,希望有人能给我解释一下,这样以后我才能避免这个问题。当我放置多个轨迹栏(在我的例子中是6)时,最后一个轨迹栏要短得多。以下是基本代码:
import cv2
def nothing(arguments):
pass
cv2.namedWindow('TrackBars')
cv2.resizeWindow('TrackBars', 500, 300)
cv2.createTrackbar('Slider 1', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 2', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 3', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 4', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 5', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 6', 'TrackBars', 0, 255, nothing)
cv2.waitKey(0)我注意到,使窗口变大可以解决这个问题:
cv2.resizeWindow('TrackBars', 500, 320)虽然下面有很大的空间,但我想也许窗户长出了铁轨,这让它的行为很奇怪。然而,在准备在这里发布代码时,我发现有2或3个轨迹栏可以正常工作,即使一个是靠窗口裁剪的。只有在有4个或4个以上的情况下才会发生这种行为。
import cv2
def nothing(arguments):
pass
cv2.namedWindow('TrackBars')
cv2.resizeWindow('TrackBars', 500, 60)
cv2.createTrackbar('Slider 1', 'TrackBars', 0, 255, nothing)
cv2.createTrackbar('Slider 2', 'TrackBars', 0, 255, nothing)
cv2.waitKey(0)这里发生了什么事?为何其中一条铁轨较短,但只有在有很多铁轨的情况下才会如此?
附加信息:
发布于 2022-11-08 23:25:23
这是OpenCV中的一个bug,似乎已经在那里逗留了一段时间。经过几个小时的挖掘(并在代码中发现了其他几个问题),我想我已经抓住了它,并提交了一个错误报告,并提出了解决方案。我将在不久的将来提出一个拉请求,希望在4.7.0版本中能够解决这个问题。
总结这个问题: trackbar控件被添加到工具栏控件中,随着添加更多控件,工具栏控件垂直增长。由于主窗口大小是在创建控件时固定的,因此工具栏未占用的其余“工作区”将逐渐缩小,直到没有空间(因此其大小变为0)。
错误在于,为了设置trackbar控件的宽度,需要使用剩余的“工作区”的宽度。一旦“工作区”缩小到零,它的大小就变成0,Windows使用其他值作为trackbar的默认宽度。
使用工具栏的宽度(总是可用的)解决了这个问题。
应用了该修补程序后,我可以得到以下内容:

更新:许多修复程序也将应用于3.4分支。
https://stackoverflow.com/questions/74358897
复制相似问题